Delphi dbgrid没有显示mysql varchar列

时间:2012-12-17 14:22:05

标签: mysql delphi delphi-xe2

我正在使用delphi XE2并处理一个mysql数据库项目。 我有一个mysql数据库,它有一个由四列组成的表 enter image description here
我在这个表中有两个示例行。

enter image description here

我正在使用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列。

enter image description here
这就像varchar列不可显示,例如sql select fname from persondb.person将导致dbgrid中的两个单细胞行。结果与sql select fname, lname from persondb.person相同,这甚至不合乎逻辑(因为我期望一个2X2空表)。

enter image description here

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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