0

我正在使用 delphi XE2 并从事 mysql 数据库项目。我有一个 mysql 数据库,它有一个由四列组成的表。
在此处输入图像描述
我在此表中有两个示例行。

在此处输入图像描述

我正在使用 TDatabase、TQuery、TDatasource 和 TDBGrid 连接到具有以下源代码的数据库:

dbgrid1.DataSource :=DataSource1 ;  
datasource1.DataSet :=Query1 ;  
database1.DatabaseName :='personDatabase';  
database1.AliasName :='mysqlodbc';  
database1.LoginPrompt :=false;  
database1.Connected :=true;  
query1.DatabaseName :=database1.DatabaseName;  
query1.SQL.Clear;  
query1.SQL.Add('select * from persondb.person;');  
query1.Active :=true;  

问题是当我尝试选择所有列和行(使用select * from persondb.person)并在 dbgrid 中显示它们时,没有显示 varchar 列,我只得到两个 int 列。

在此处输入图像描述
就像 varchar 列无法显示,例如 sqlselect fname from persondb.person将在 dbgrid 中产生两个单单元行。结果与select fname, lname from persondb.person甚至不合逻辑的 sql 相同(因为我期望一个 2X2 的空表)。

在此处输入图像描述

我还将数据库的字符集 utf8 更改为 latin1,并认为问题可能就在那里,但也没有运气。
我用谷歌搜索了几个小时,甚至没有与我类似的问题。但我倾向于预期的正常行为是 dbgrid 显示(memo)每个人都试图克服的 varchar 字段。
所以任何帮助表示赞赏。

4

1 回答 1

0

它发生在我几天前的视图中。使用 dbExpress 或 Ado 连接代替 BDE 不是一个好主意,因为它需要更多时间来学习和更改代码。我使用oracle(可能与mysql类似)。您应该检查您的数据库结构。

在 Oracle 11 中,dbgrid 无法显示所有具有 VARCHAR2 数据类型和 CHAR 单元的列。dbgrid 仅以 BYTE 为单位显示数据。但在 Oracle 9i 中,一切都很好。

因此,解决方案是更改单位(charbyte)。这是 oracle 的 sql 语句:

ALTER TABLE USERX.TABLENAME MODIFY (COLUMNNAME VARCHAR2(50 BYTE));

于 2014-01-20T15:30:16.847 回答