我要开发一个MySql的数据字典工具,公司使用的数据库是MySql3.23.39, 我用MySql ODBC 3.5 + ADO. 要取的表的结构,执行语法 show fields from <tablename>. 如果这个表中的字段默认值是null, 发现dataset.actived := True; 报错,错误信息: 数据提供程序或其它服务返回E_FAIL状态。
使用ADO原生接口测试,也是一样,代码如下:
var
rsData: _Recordset;
rsconn: _Connection;
sSql: string;
vEffect: OleVariant;
I: Integer;
const
ConnectionString = 'DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; ' +
'USER=root; PASSWORD=; OPTION=3;';
begin
rsData := CoRecordset.Create; rsData.CursorLocation := adUseClient;
rsconn := CoConnection.Create;
rsconn.Open(ConnectionString, 'root', '', adConnectUnspecified);
rsconn.Execute('use cloud', vEffect, adCmdText);
sSql := 'DESCRIBE pet';//' select * from pet ';
rsData.Open(sSql, rsconn, adOpenStatic, AdLockReadOnly, adCmdText);
showmessage(IntToStr(rsData.RecordCount)); //会发现RecordCount = - 1;!!!!
edt1.Text := rsData.Fields[0].Value;
edt2.Text := rsData.Fields[1].Value;
edt3.Text := rsData.Fields[2].Value;
edt4.Text := rsData.Fields[3].Value;
edt5.Text := rsData.Fields[4].Value;
edt6.Text := rsData.Fields[5].Value;
for I := 0 to rsData.Fields.Count - 1 do
begin
tv1.Items.Add(nil, rsData.Fields[I].Name);
end; 请问有什么解决办法? 或者替代方案。。 非常感谢!
使用ADO原生接口测试,也是一样,代码如下:
var
rsData: _Recordset;
rsconn: _Connection;
sSql: string;
vEffect: OleVariant;
I: Integer;
const
ConnectionString = 'DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost; ' +
'USER=root; PASSWORD=; OPTION=3;';
begin
rsData := CoRecordset.Create; rsData.CursorLocation := adUseClient;
rsconn := CoConnection.Create;
rsconn.Open(ConnectionString, 'root', '', adConnectUnspecified);
rsconn.Execute('use cloud', vEffect, adCmdText);
sSql := 'DESCRIBE pet';//' select * from pet ';
rsData.Open(sSql, rsconn, adOpenStatic, AdLockReadOnly, adCmdText);
showmessage(IntToStr(rsData.RecordCount)); //会发现RecordCount = - 1;!!!!
edt1.Text := rsData.Fields[0].Value;
edt2.Text := rsData.Fields[1].Value;
edt3.Text := rsData.Fields[2].Value;
edt4.Text := rsData.Fields[3].Value;
edt5.Text := rsData.Fields[4].Value;
edt6.Text := rsData.Fields[5].Value;
for I := 0 to rsData.Fields.Count - 1 do
begin
tv1.Items.Add(nil, rsData.Fields[I].Name);
end; 请问有什么解决办法? 或者替代方案。。 非常感谢!
你理解错我的意思了,rsData.isempty判断也不能解决问题啊, 我的问题是只要表定义中有字段默认值是Null的,那这个表的元数据定义就无法取回。我改用dbExpress解决了。