动态创建一个VFP表。通过ADOQUERY和数据源outinterface连接。outinterface是ODBC的一个连接VFP的数据源
ADOQUERY。的SQL语句为: create table table1 (aa char(20) null,bb char(30) null)执行sql语句 ADOQUERY.ExecSQL 后在outinterface指定的目录下没有表table1创建。可是也没有任何错误。可是下面的方法却可以: 用一个savedialog选择一个目录。选择好以后创建一个ODBC数据源outinterface 然后在执行上面同样的SQL语句。结果却有表出现。不知道是什么原因。还请大家赐教。。
ADOQUERY。的SQL语句为: create table table1 (aa char(20) null,bb char(30) null)执行sql语句 ADOQUERY.ExecSQL 后在outinterface指定的目录下没有表table1创建。可是也没有任何错误。可是下面的方法却可以: 用一个savedialog选择一个目录。选择好以后创建一个ODBC数据源outinterface 然后在执行上面同样的SQL语句。结果却有表出现。不知道是什么原因。还请大家赐教。。
begin
ADOConnection1.ConnectionString:= 'Provider=MSDASQL.1;Persist Security Info=False;Data Source=OutInterface';end;//动态创建一个ODBC数据源
function TFormMain.CreateVfpDsn(aDsnName, aPath: string;
isDb: boolean): integer;
const
vfpDriver='vfpodbc.dll';
AccessDriver='odbcjt32.dll';
SQLDriver='sqlsrv32.dll';
var
MyRegister:TRegistry;
SysDir:array[0..255]of char;
systemPath:string;
begin
GetSystemDirectory(SysDir,255);
systemPath:=SysDir;
try
MyRegister:=TRegistry.Create; //建立一个Registry实例
with MyRegister do
begin
RootKey:=HKEY_CURRENT_USER; //设置根键值为HKEY_CURRENT_USER
if OpenKey('Software\ODBC\ODBC.INI\ODBC Data Sources',True) then //找到Software\ODBC\ODBC.INI\ODBC Data Sources writeString(aDsnName,'Microsoft visual FoxPro Driver');
CloseKey;
if OpenKey('Software\ODBC\ODBC.INI\'+aDsnName,true) then
begin
writeString('BackgroundFetch','yes');
writeString('Collate','Machine');
writeString('Deleted','yes');
writeString('Description','');
writeString('driver',systemPath+'\'+vfpDriver);
writeString('Exclusive','No');
writeString('Null','yes');
writeString('SetNoCountOn','No');
writeString('SourceDB',aPath);
if isDb then
writeString('SourceType','DBC')
else
writeString('SourceType','DBF');
end;
CloseKey;
end;
finally
MyRegister.Free;
end;
end;//连接数据源并且执行SQL语句 有故障
procedure TForm1.Button1Click(Sender: TObject);
begin
CreateVfpDsn('OutInterface','c:\',false);
ADOQuery1.Connection:= ADOConnection1;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('create table table1 (aa char(20) null,bb char(30) null)');
ADOQuery1.ExecSQL;
end;procedure TForm1.Button2Click(Sender: TObject);//这个竟然就可以了。
begin
SaveDialog.Filter:= 'VFP 文件(dbf)|*.dbf';
if SaveDialog.Execute then
begin
ODBCPath.Text:= ExtractFilePath(SaveDialog.FileName);
CreateVfpDsn('OutInterface',ODBCPath.Text,false);
end;
ADOQuery1.Connection:= ADOConnection1;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('create table table1 (aa char(20) null,bb char(30) null)');
ADOQuery1.ExecSQL;
end;//这个是部分代码。完全能表现我说的现象。