如何取得Table Schema ? |
尚未結案
|
shiefu
一般會員 發表:3 回覆:6 積分:1 註冊:2003-09-22 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
shiefu
一般會員 發表:3 回覆:6 積分:1 註冊:2003-09-22 發送簡訊給我 |
hagar兄:
我已經使用了這個Procedure,但在Run的時候有Error產生,在下的宣告如下
Var
myschemainfo:TSchemaInfo;
myrestriction,myschemaID:olevariant;
begin
adoconnection1.OpenSchema(mySchemaInfo,myrestriction,myschemaid,adodataset1);
end; 因為Error訊息實在看不出來那個參數有問題(OLEVariant或TSchemaInfo),所以
只好救助各位有沒有其它的解,感謝您的回答,謝謝您!
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
James
高階會員 發表:10 回覆:290 積分:220 註冊:2002-07-25 發送簡訊給我 |
|
MorganBoy
一般會員 發表:14 回覆:75 積分:22 註冊:2003-04-30 發送簡訊給我 |
以下是我寫的資料庫轉移工具中的一段,參考看看。
function My_GetPKDataOK ( ThisConnection : TAdoConnection ; ThisTableName : string ; var rPKName : string ; var rPKFieldSSText : widestring ) : Boolean ; stdcall ; // ======================================================= // 以 AdoConnection.openSchemaz抓某表格的PrimaryKey-TableName與 // 此表PK的欄位清單﹝﹞以 TStrings-WideString格式傳回 // rPKName 例: SaMen#PK // rPKFieldSSText:如pk為 'ID_No;ID_Name;Unit_ID_Code',則回傳 // 由此三字串依序組成的 TStringS-WideString // 此在建或改相關表格的PrimaryKey-Constraint時很有用 // 以上適用於 Paradox/Access/MSSQL,對PostgreSQL/MySQL應亦可 // ======================================================= var ThisAdoDataSet : TAdoDataSet ; SS : TStringS ; II : integer ; begin ThisAdoDataSet := TAdoDataSet.Create(Application) ; SS := TStringList.Create ; try try Result := False ; My_ShowBusy ; ThisConnection.OpenSchema( My_GetSchemaInfo('siPrimaryKeys'), VarArrayOf([Unassigned]) , EmptyParam , ThisAdoDataSet ); if Not ThisAdoDataSet.Locate('Table_Name' ,Trim(ThisTableName), [loCaseInsensitive,loPartialKey]) then exit ; rPKName := ThisAdoDataSet.FieldByName('PK_Name').AsString ; while AnsiCompareText( Trim(ThisAdoDataSet.FieldByName('Table_Name').AsString), Trim(ThisTableName)) = 0 do begin SS.Add (ThisAdoDataSet.FieldByname('Column_Name').AsString); ThisAdoDataSet.Next ; end ; rPKFieldSSText := SS.Text ; My_ShowBusy ( False ) ; Result := SS.Count > 0 ; except Result := False ; end ; finally SS.Free ; ThisAdoDataSet.Free ; end ; end ;發表人 - morganboy 於 2004/12/29 07:17:46 |
shiefu
一般會員 發表:3 回覆:6 積分:1 註冊:2003-09-22 發送簡訊給我 |
|
shiefu
一般會員 發表:3 回覆:6 積分:1 註冊:2003-09-22 發送簡訊給我 |
|
James
高階會員 發表:10 回覆:290 積分:220 註冊:2002-07-25 發送簡訊給我 |
如果你真的要去用 OpenSchema 這個 method 的話, 那最好參考一下 MSDN
上面詳細的說明 ,至於 MorganBoy 兄所寫的函數, 我猜可能是要做一些
SchemaEnum 的對應 , 你可以對應以下的網址看看 , 應該是一樣的意思 http://msdn.microsoft.com/library/default.asp?url=/library/en-us/ado270/htm/mdcstschemaenum.asp
|
MorganBoy
一般會員 發表:14 回覆:75 積分:22 註冊:2003-04-30 發送簡訊給我 |
就如James前輩講的,我寫的My_GetSchemaInfo('siPrimaryKeys')只是將字串的
'siPrimaryKeyS'轉為 Ado-OpenSchema所須的siPrimaryKetS參數而矣,只是作對照表罷了。 Ado-Openschema蠻好用,有時你要把幾個參數結果DataSet合起來互查才行。比如說 siColumns的DataType只是個Integer值,要知道這個值究竟是何種DataTYpe,你就要用 siProviderType的DataType去對回到 Type_Name﹝如Bit/Decimal/VarChar﹞才行。 發表人 - MorganBoy 於 2004/12/29 23:33:33
|
shiefu
一般會員 發表:3 回覆:6 積分:1 註冊:2003-09-22 發送簡訊給我 |
|
jeff377
初階會員 發表:9 回覆:60 積分:33 註冊:2004-08-10 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |