VFP 愛用者社區 首頁 VFP 愛用者社區
本討論區為 Visual Foxpro 愛用者經驗交流的地方, 請多多利用"搜尋"的功能, 先查看看有無前例可循, 如果還有不懂的再發問. 部份主題有附加檔案, 須先註冊成為社區居民才可以下載.
 
 常見問題常見問題   搜尋搜尋   會員列表會員列表   會員群組會員群組   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入

關于VFP的 一個比較奇怪的問題

 
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區
上一篇主題 :: 下一篇主題  
發表人 內容
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
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 參觀發表人的個人網站 MSN Messenger
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. 想學習系統規劃,想找系統架構的顧問

請聯絡我們,也許我們幫得上忙
回頂端
檢視會員個人資料 發送私人訊息 發送電子郵件 AIM Address
eachsky



註冊時間: 2005-09-29
文章: 6


第 6 樓

發表發表於: 星期五 九月 30, 2005 1:37 pm    文章主題: 引言回覆

已经解决。。。感谢各位!!
回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    VFP 愛用者社區 首頁 -> VFP 討論區 所有的時間均為 台北時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票
無法 在這個版面附加檔案
無法 在這個版面下載檔案


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作