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

請教有關AdoConnection1.OpenSchema的參數

尚未結案
MorganBoy
一般會員


發表:14
回覆:75
積分:22
註冊:2003-04-30

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-23 14:34:12 IP:61.231.xxx.xxx 未訂閱
各位前輩: 小弟初次使用AdoConnection1.OpenSchema去抓SQLDB的資料庫Schema,我可以找到OnLineHelp的TSchemaInfo的清單,可是對應不同SchemaInfo參數要帶的Restrictions的對應清單就找不到了。煩請各位前輩指點一下。 我現試的資料庫是MSSQL2K。謝謝各位前輩。
MorganBoy
一般會員


發表:14
回覆:75
積分:22
註冊:2003-04-30

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-23 23:36:18 IP:61.231.xxx.xxx 未訂閱
我現用的Restriction是用UnAssigned,有些是可以,但是很多是不行的。 我要到那裏去找這些資料才對?
MorganBoy
一般會員


發表:14
回覆:75
積分:22
註冊:2003-04-30

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-24 08:25:23 IP:61.231.xxx.xxx 未訂閱
那位前輩可以幫忙一下嗎? 小弟最近想寫幾支工具做不同資料庫間DB轉移的工作,尤其是想將MSSQL/Access/Paradox的DB轉到PostgreSQL/MySQL上,及將PostgreSQL/MySQL的DB轉回到MSSQL/Access/Paradox來。 小弟摸索了一個多星期了,沒什麼頭緒,想請各位前輩指點一下。謝謝。
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-25 09:58:03 IP:219.80.xxx.xxx 未訂閱
你好:
  ADOInt 原生 ADO 的宣告定義如下    function OpenSchema (QueryType, Criteria, SchemaID) : Recordset;    QueryType
  Schema 常數,如 adSchemaTables 代表取得所有屬性的表格物件。在 Delphi 中宣告一個 TSchemaInfo 集合對應。    Criteria
 陣列型態,讓你填入篩選條件。這個陣列的數量與填入的值隨著呼叫的 QueryType 不同而改變。如省略則填入 EmptyParam 既可。    SchemaID
 如果你的 QueryType 設定為 adSchemaProviderSpecific,這個參數才需要設定,否則可填入 EmptyParam。    Ex:
OpenSchema(adSchemaTables, EmptyParam, EmptyParam)        // 將傳回所有屬性的表格物件名稱
OpenSchema(adSchemaTables, VarArrayOf([Null, Null, Null, 'View'], EmptyParam)        // 將傳回所有 View 屬性的物件名稱    再讓我們對應 AdoDB Delphi 的宣告方式
procedure OpenSchema(const Schema: TSchemaInfo; const Restrictions, SchemaID: OleVariant; DataSet: TADODataSet);    Schema 
    其實是對應 ado 的 QueryType    Restrictions
    其實是對應 ado 的 Criteria    SchemaID
    其實是對應 ado 的 SchemaID    DataSet
    要把 ado 所傳回的 Recordset 以 TADODataSet 封裝起來,方便使用。    Ex:
OpenSchema(siTables, EmptyParam, EmptyParam, ds)        // 將傳回所有屬性的表格物件名稱
OpenSchema(siTables, VarArrayOf([Null, Null, Null, 'View', ds], EmptyParam)        // 將傳回所有 View 屬性的物件名稱    上面拉拉雜雜的說了一堆,主要是讓你了解 Delphi 與原生 ADO 之間 OpenSchema 的對應關係,如此你應該比較容易瞭解
該怎麼使用 OpenSchema 。如果要更詳盡相關於 Criteria 參數的定義,你可以上 M 的 SDK 上查
    < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
        
Wesly
中階會員


發表:14
回覆:103
積分:53
註冊:2002-05-31

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-27 00:25:39 IP:218.171.xxx.xxx 未訂閱
請去參考http://delphi.ktop.com.tw/topic.php?TOPIC_ID=58564的檔案, 若對MS SQL 而言因其有所對映Store Procedure, 所以其參數就是Store Procedure的參數了, 其它的你可以依ha0009兄的做法就可以了 希望能對你有所幫助.
MorganBoy
一般會員


發表:14
回覆:75
積分:22
註冊:2003-04-30

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-27 07:24:10 IP:61.231.xxx.xxx 未訂閱
謝謝兩位前輩的指點。小弟研試中。拜謝了。
MorganBoy
一般會員


發表:14
回覆:75
積分:22
註冊:2003-04-30

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-31 11:23:04 IP:61.231.xxx.xxx 未訂閱
謝謝版主及Welsy兩位前輩的回應。小弟收獲頗多,但原先的問題還是沒解決。故還是厚者臉皮上來求救。 小弟的問題是要取得標的資料庫的結構以便在另外不同類型的DBServer上重建及複製資料。 小弟有將AdoDB/AdoInt/AdoConst及M$-MSDN-OpenSchema全印出來,甚至還將AdoDB/AdoInt/AdoConst印本送去裝釘及苦研了一個多星期。這方面的努力當然因程度相差太遠,所以無疾而終。 我有用過MSSQL-ErterpriseManager的產生SQL指令碼的功能,這的確是蠻貼心的東西,很可以參考。但我想要自己來作一個簡單的轉移工具,能抓Source-DB-Stru的Schema再在標的資料庫﹝如MSSQL/Access/Paradox/Postgresql/MySQL﹞重建此資料庫結構以便轉移資料。 我只要作雛型,不考慮StoreProc/Constrain/Trig等,我只要抓欄位清單,及FieldType與FieldSize與DefaultValue。欄位清單沒問題。但FieldType及FieldSize,我是發現OpenSchema-siColumns有傳回Data_Type﹝但為代號,無代號表無法使用﹞,此外Character_Maxium等要如何使用?
MorganBoy
一般會員


發表:14
回覆:75
積分:22
註冊:2003-04-30

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-10-31 11:35:13 IP:61.231.xxx.xxx 未訂閱
此外,我有試過用FieldDefs來抓FieldType/FieldSize/Required,及配合OpenSchema傳回的Table/Field清單建Create SQL及手動修正CreateSQL內容。不過我有下列問題: 我的客戶現使用的資料庫是最常見的MSSQL/Access/Paradox 1.在不同Type-DB時CreateSQL的欄位型態我要如何設?不同資料庫的FieldType是不同的。我原先是針對FieldDefs-TFieldType自己寫對照碼取回不同標的TypeDB﹝MSSQL/Access/Paradox﹞的createSQL的欄位型態字串﹝這實在太耗摸索功夫了,我試了好幾個沒睡覺的晚上了﹞。此外我在AdoDB中有找到Func AdoFieldType與FieldDefs-TFieldType轉換的函式,可是我有了AdoFieldType值了以後我又要如何才能得出不同DBTYpe的欄位型態字串?
MorganBoy
一般會員


發表:14
回覆:75
積分:22
註冊:2003-04-30

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-10-31 12:15:23 IP:218.160.xxx.xxx 未訂閱
SELECT A.colid, A.name, A.length, A.type, A.usertype FROM dbo.syscolumns A WHERE A.id = (select id from dbo.sysobjects where name = 'TableName' and type = 'U') ORDER BY A.colid 以上是我在另一篇看到Change.jian前輩回覆可用於Sybase/Oracle,且我才試用於MSSQL也成功的解法,這裏有兩個問題: 1.出來的FieldType數值仍須要清單以對回來。當然我可以對照實際DB找出常用的數值與實際Type來。這個還好解決,不必想法去找MSDN的清單就可以了。 2.這在Access/Paradox是不行的,當然。 連者三天沒睡覺了,小弟已經開始胡言亂語了...
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-11-01 09:59:34 IP:219.80.xxx.xxx 未訂閱
請問兩個標題意義一樣嗎? 是否重開一個題目比較好呢 <>> <>> < src="http://sourceprovide.deepen.com.tw/K_Top/bp.gif">
MorganBoy
一般會員


發表:14
回覆:75
積分:22
註冊:2003-04-30

發送簡訊給我
#11 引用回覆 回覆 發表時間:2004-11-02 17:24:04 IP:61.231.xxx.xxx 未訂閱
說的也是。關於OpenSchema應該是沒問題了。我原先問題的目標是想作個資料轉移的工具,試了這一兩個星期,碰壁經驗豐富。我針對這個資料庫轉移問題的瓶頸部份另啟題再向前輩們請益。 謝謝版主及Wesly兩位前輩的大力幫忙。謝謝了。
系統時間:2024-05-16 1:52:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!