Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在delphi中,当查询选择varchar数据类型的列时打开MySQL查询_Mysql_Delphi_Delphi 2009 - Fatal编程技术网

在delphi中,当查询选择varchar数据类型的列时打开MySQL查询

在delphi中,当查询选择varchar数据类型的列时打开MySQL查询,mysql,delphi,delphi-2009,Mysql,Delphi,Delphi 2009,我最近开始使用MySql,所以我可能犯了一个错误。感谢您的帮助 我在Delphi中连接数据库,定义一个数据类型为integer、decimal和varchar的列的查询 问题是,当我在Delphi中选择一个查询,并在打开查询后进行调试时,如果没有选择varchar列,则这些列不会显示为我 odbc连接器的驱动程序是最新的mysql-connector-odbc-5.1.10示例查询: SELECT anumber, adecimalnumber, avarchar FROM atable 示例

我最近开始使用MySql,所以我可能犯了一个错误。感谢您的帮助

我在Delphi中连接数据库,定义一个数据类型为integer、decimal和varchar的列的查询

问题是,当我在Delphi中选择一个查询,并在打开查询后进行调试时,如果没有选择varchar列,则这些列不会显示为我

odbc连接器的驱动程序是最新的mysql-connector-odbc-5.1.10

示例查询:

SELECT anumber, adecimalnumber, avarchar FROM atable
示例Delphi代码(从内存中执行此操作,所以不要介意小错误)

程序测试;
变量
提问:TADOQuery;
数量:整数;
抽象的:真实的;
绷带:弦;
开始
AQuery:=TAdoQuery.Create;
尝试
连接:=SomeODBCConnection;
query.SQL.Text:=“从atable中选择一个数字、一个数字、一个数字”;
开水室;
ANumber:=AQuery.FieldByName('ANumber').AsInteger;
ADecimal:=AQuery.FieldByName('anumber').AsFloat;

AString:=AQuery.FieldByName('anumber').AsString 推测:似乎您正在使用dbTables->BDE->ODBC->MySQL数据访问路径。BDE跳过数据类型未知的字段。BDE可能不支持Unicode字符类型

可能的解决方案

  • 尝试在ODBC连接参数中为连接设置ANSI字符集
  • 使用dbGo/ADO数据访问组件
  • 使用dbExpress组件和MySQL dbExpress驱动程序
  • 使用3d party数据访问组件

如果在设计模式下为
TQuery
定义了持久字段,可能是忘记添加varchar(
TStringField
)字段,或拼写错误的
字段名
。还要确保该字段是
varchar
而不是
nvarchar
TWideStringField


另一个解决方案是从
TQuery

显示mysql查询和表模式中删除所有持久字段please@dzibul,请出示您的检索代码,以便我们能给您一个合理的答案。我使用的方法与我完全相同。问题是,当我尝试访问varchar类型的字段时,会出现异常。我尝试使用字段[i]代替fieldbyname,但varchar类型的字段不存在。我认为司机可能是问题所在,但我使用的是最新的:(
procedure Test;
var
  AQuery: TADOQuery;
  ANumber: integer;
  ADecimal: Real;
  AString: string;
begin
  AQuery:= TAdoQuery.Create;
  try
    AQuery.Connection:= SomeODBCConnection;
    AQuery.SQL.Text:= 'SELECT anumber, adecimalnumber, avarchar FROM atable';
    AQuery.Open;
    ANumber:= AQuery.FieldByName('anumber').AsInteger;
    ADecimal:= AQuery.FieldByName('anumber').AsFloat;
    AString:= AQuery.FieldByName('anumber').AsString;  << Gets the varchar.
    //Use AQuery.Next + test for AQuery.EOF to walk through rows.
  finally
    AQuery.Free;
  end; 
end;