全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2742
推到 Plurk!
推到 Facebook!

使用ADO連接Paradox的一些問題!

尚未結案
fabch2
一般會員


發表:2
回覆:2
積分:0
註冊:2005-01-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-01-02 23:03:27 IP:61.228.xxx.xxx 未訂閱
當建立資料表時: create table mytable( cnumber integer, cdata char(32), primary key (cnumber) ); 出現以下錯誤訊息: [Microsoft] [ODBC Paradox Driver]'Index_7C7CDDA2_C431_11D7' is not a valid name. Make sure that it does not include invalid characters or punctuation and that it is not too long. 若不在 create table 時建立primary key 就可以成功; 但是新增資料時又出現錯誤: Insert into mytable (cnumber, cdata) VALUES (0,'test') 錯誤訊息: [Microsoft][ODBC Paradox Driver]運作必須使用更新查詢 當使用 database desktop 工具加上 primary key 新增資料就可以正常了; 不知有沒有不使用 database desktop 等額外工具解決此問題的方法。
RobertLi
一般會員


發表:1
回覆:31
積分:21
註冊:2002-09-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-01-02 23:44:15 IP:61.231.xxx.xxx 未訂閱
以ADO聯接Paradox7.X可以直接用OLEDB Provider。除非是PostgreSQL/MySQL等非用ODBC不可之環境,還是以不用ODBC而直接用OLEDB Provider較好 在MSSQL時CreateTable及Primary寫在一起很好,但用ADO丟SQL-DDL時這兩個要分開來,否則是會有錯的。但如用BDE-Query去丟反而可以寫在一起。這是我的經驗。 分開寫如 Create Table Table_Name ( ) ; Alter table Table_Name add Constraint Table_Name_PX primary key ( ... ) ; 發表人 - robertli 於 2005/01/02 23:57:00
RobertLi
一般會員


發表:1
回覆:31
積分:21
註冊:2002-09-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-01-02 23:49:48 IP:61.231.xxx.xxx 未訂閱
==>[Microsoft][ODBC Paradox Driver]運作必須使用更新查詢 用ADO時,如果沒有PrimaryKey時這一定會出這個ErrMsg。 在paradox時如果沒PrimaryKey是沒關係的,可是在別的DB是有問題的。
RobertLi
一般會員


發表:1
回覆:31
積分:21
註冊:2002-09-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-01-02 23:53:15 IP:61.231.xxx.xxx 未訂閱
==>不知有沒有不使用 database desktop 等額外工具解決此問題的方法。 將這兩個SQL-DLL用AdoCommand包起來丟到Paradox去作就可以了。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-01-03 03:45:58 IP:61.71.xxx.xxx 未訂閱
引言: ==>不知有沒有不使用 database desktop 等額外工具解決此問題的方法。 將這兩個SQL-DLL用AdoCommand包起來丟到Paradox去作就可以了。
如果你是用paradox 利用下列方式會穩很多
建立檔案
procedure CreateNew;
   var newTable: TTable;
begin
   newTable:= TTable.Create(self);
   newTable.DatabaseName:= ExtractFilePath(tFile);  // tFile是要建立的新檔(含路徑)
   newTable.TableType:= ttParadox;
   newTable.TableName:= ExtractFileName(tFile);
   with newTable.FieldDefs do begin
        Add('cnumber',ftfloat, 0, False);
        Add('cdata',ftstring, 32, False);
   end;
   newTable.CreateTable;
   newTable.Free;
end;    建立索引
procedure TTable.AddIndex(const Name, Fields: string; Options: TIndexOptions;
  const DescFields: string);
var
  IndexDesc: IDXDesc;
  LocaleSave: TLocale;
begin
  FieldDefs.Update;
  if Active then
  begin
    EncodeIndexDesc(IndexDesc, Name, Fields, Options, DescFields);
    CheckBrowseMode;
    CursorPosChanged;
    Check(DbiAddIndex(DBHandle, Handle, nil, nil, IndexDesc, nil));
  end else
  begin
    LocaleSave := SetTempLocale(False);
    try
      EncodeIndexDesc(IndexDesc, Name, Fields, Options, DescFields);
    finally
      RestoreLocale(LocaleSave);
    end;
    SetDBFlag(dbfTable, True);
    try
      Check(DbiAddIndex(DBHandle, nil, NativeTableName, GetTableTypeName,
        IndexDesc, nil));
    finally
      SetDBFlag(dbfTable, False);
    end;
  end;
  IndexDefs.Updated := False;
end;    實例
procedure ...
   var myTable: TTable
begin
  myTable.Close;
  myTable.DatabaseName:= ExtractFilePath(tFile);  // tFile是剛建立好的檔案含路徑
  myTable.TableType:= ttParadox;
  myTable.TableName:= ExtractFileName(tFile); // 例如 Test.db
  myTable.Exclusive:= True;
  myTable.AddIndex('Test.px','cnumber',[ixPrimary,ixUnique]);
fabch2
一般會員


發表:2
回覆:2
積分:0
註冊:2005-01-02

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-01-03 22:12:58 IP:61.228.xxx.xxx 未訂閱
小弟使用的 OLE DB Provider(s) 是 Microsoft OLE DB Provider for ODBC Drivers 不知 RobertLi 兄是否指的是這個, 這是網路上看來的實在也不知道該選哪個好。 ConnectionString := Provider=MSDASQL.1;Persist Security Info=False;Extended Properties="CollatingSequence=ASCII;DefaultDir=C:\;Driver={Microsoft Paradox Driver (*.db )};DriverId=538;FIL=Paradox 5.X;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ParadoxNetPath=C:\WINNT\system32;ParadoxNetStyle=4.x;ParadoxUserName=admin;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;" 其他測試如下: 全部都會出現類似 [Microsoft] [ODBC Paradox Driver]'Index_7C7CDDA2_C431_11D7' is not a valid name. 的錯誤 如果使用 TTable 或 TQuery 元件則沒問題且沒有一定要設定 primary key 的限制, 但是還是想知道使用 ADO 的做法。 procedure TForm1.BitBtn1Click(Sender: TObject); var sSQL : String; begin sSQL := ' create table mytable( ' ' cnumber integer, ' ' cdata char(32) ' ' ); '; ADOQuery1.SQL.Text := sSQL; ADOQuery1.ExecSQL; end; procedure TForm1.BitBtn2Click(Sender: TObject); var sSQL : String; begin sSQL := ' Alter table mytable ' ' add Constraint mytable_PX ' ' primary key (cnumber) '; ADOQuery2.SQL.Text := sSQL; ADOQuery2.ExecSQL; end; procedure TForm1.BitBtn3Click(Sender: TObject); var sSQL : String; begin sSQL := ' create table mytable( ' ' cnumber integer, ' ' cdata char(32), ' ' primary key (cnumber) ' ' ); '; ADOCommand1.CommandText := sSQL; ADOCommand1.Execute; end; procedure TForm1.BitBtn4Click(Sender: TObject); var sSQL : String; begin sSQL := ' create table mytable( ' ' cnumber integer, ' ' cdata char(32) ' ' ); ' ' Alter table mytable ' ' add Constraint mytable_PX ' ' primary key (cnumber) '; ADOCommand1.CommandText := sSQL; ADOCommand1.Execute; end; procedure TForm1.BitBtn5Click(Sender: TObject); var sSQL : String; begin sSQL := ' Alter table mytable ' ' add Constraint mytable_PX ' ' primary key (cnumber) '; ADOCommand1.CommandText := sSQL; ADOCommand1.Execute; end;
RobertLi
一般會員


發表:1
回覆:31
積分:21
註冊:2002-09-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-01-04 18:56:40 IP:61.231.xxx.xxx 未訂閱
Paradox 7.X聯接ADO 1.Provider==>MS Jet OLE DB Provider 2.All==>extended properties為Paradox 7.X 3.Connection Data Source為你的paradox所在的目錄 不要用odbc,直接用OLE DBProvider。 我有將BDE Paradox/MSSQL舊系統改用為ADO Paradox/Access/MSSQL/PG的經驗。將碰壁經驗分享一下。 PK是最好要有的,在MSSQL,在ADO,沒PK是不行的。 因為沒傳回資料集,不必用AdoQuery,用AdoCommand就好了。用你的Btn4-Code就好了。 在Ado-MSSQL你將CraeteTable及PK寫在一起,沒問題。在BDE-Paradox也可以,可是在ADO-Paradox就必須分開才行。就是你的Btn4-Code,就可以了。 在Access時各表的PK可以同名﹝即PrimaryKey﹞,可是在Paradox/MSSQL就不可同名。 講到工具,當然你可以用各個資料庫提供的工具來作DDL/DML,不過反正是SQL,而且各家SQL大部份類似,小弟到是建議你自己寫個工具來作這些動作較好。替客戶作維護或是作系統升級與資料庫轉移都很方便。
系統時間:2024-05-19 10:38:56
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!