 |
VFP 愛用者社區 本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
|
上一篇主題 :: 下一篇主題 |
發表人 |
內容 |
eachsky
註冊時間: 2005-09-29 文章: 6
第 1 樓
|
發表於: 星期五 九月 30, 2005 9:25 am 文章主題: 關于VFP的 一個比較奇怪的問題 |
|
|
动态创建一个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语句。结果却有表出现。不知道是什么原因。还请大家赐教。。 |
|
回頂端 |
|
 |
eachsky
註冊時間: 2005-09-29 文章: 6
第 2 樓
|
發表於: 星期五 九月 30, 2005 10:15 am 文章主題: |
|
|
procedure TForm1.FormShow(Sender: TObject);
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;
//这个是部分代码。完全能表现我说的现象。 |
|
回頂端 |
|
 |
bin1x
註冊時間: 2004-08-27 文章: 462
第 3 樓
|
發表於: 星期五 九月 30, 2005 10:22 am 文章主題: |
|
|
eachsky 寫到: | procedure TForm1.FormShow(Sender: TObject);
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;
//这个是部分代码。完全能表现我说的现象。 |
怎麼看起來像pascal 該不是delphi的程式吧
也許我真的就呆呆的拿到vfp去run |
|
回頂端 |
|
 |
eachsky
註冊時間: 2005-09-29 文章: 6
第 4 樓
|
發表於: 星期五 九月 30, 2005 10:52 am 文章主題: |
|
|
楼上正解。就是DELPHI程式!!我弄了两天了。还没结果。大家帮忙一下。 |
|
回頂端 |
|
 |
syntech
註冊時間: 2003-05-16 文章: 4249 來自: Taipei,Taiwan
第 5 樓
|
發表於: 星期五 九月 30, 2005 11:03 am 文章主題: |
|
|
該不會產生在 C:\ 吧!
有搜尋檔案過嗎? _________________ 如果公司有下列困擾:
1. 找不到便宜,快速,簡易的 生產排程軟體
2. 不知道如何快速排定 採購計劃
3. 成本抓不準,自己算比軟體算有用
4. 想學習系統規劃,想找系統架構的顧問
請聯絡我們,也許我們幫得上忙 |
|
回頂端 |
|
 |
eachsky
註冊時間: 2005-09-29 文章: 6
第 6 樓
|
發表於: 星期五 九月 30, 2005 1:37 pm 文章主題: |
|
|
已经解决。。。感谢各位!! |
|
回頂端 |
|
 |
|
|
您 無法 在這個版面發表文章 您 無法 在這個版面回覆文章 您 無法 在這個版面編輯文章 您 無法 在這個版面刪除文章 您 無法 在這個版面進行投票 您 無法 在這個版面附加檔案 您 無法 在這個版面下載檔案
|
|