請教有關AdoConnection1.OpenSchema的參數 |
尚未結案
|
MorganBoy
一般會員 發表:14 回覆:75 積分:22 註冊:2003-04-30 發送簡訊給我 |
|
MorganBoy
一般會員 發表:14 回覆:75 積分:22 註冊:2003-04-30 發送簡訊給我 |
|
MorganBoy
一般會員 發表:14 回覆:75 積分:22 註冊:2003-04-30 發送簡訊給我 |
|
ha0009
版主 發表:16 回覆:507 積分:639 註冊:2002-03-16 發送簡訊給我 |
你好: 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 發送簡訊給我 |
|
MorganBoy
一般會員 發表:14 回覆:75 積分:22 註冊:2003-04-30 發送簡訊給我 |
|
MorganBoy
一般會員 發表:14 回覆:75 積分:22 註冊:2003-04-30 發送簡訊給我 |
謝謝版主及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 發送簡訊給我 |
此外,我有試過用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 發送簡訊給我 |
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 發送簡訊給我 |
|
MorganBoy
一般會員 發表:14 回覆:75 積分:22 註冊:2003-04-30 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |