ADO的OPENSCHEMA |
答題得分者是:eaglewolf
|
vicky3189
一般會員 發表:1 回覆:5 積分:1 註冊:2007-07-19 發送簡訊給我 |
想請問ADO的高手們,我在網路上找很久都找不到解答
問題一:用ADO的OPENSCHEMA取得欄位結構後 MS SQL 的decimal和numeric無法分別,因回傳的DATA_TYPE都是131 但我下載Wesly大大的工具程式http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=58250 他郤可分別,可惜那位大大好都沒回我..>< 問題二:目前想改寫成ORACLE可用的版本,但使用Provider=OraOLEDB.Oracle.1 就取不到欄位大小,但同樣的Wesly大大的工具程式就可以...為什麼..>< 那位可幫助我咩..>< | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
使用MS-SQL 2000
可以利用以下的SQL Command可取得Table內所有欄位的Data Type SELECT C.name AS Column_Name, T.name AS Type_Name FROM sysobjects O INNER JOIN syscolumns C ON O.id = C.id INNER JOIN systypes T ON C.xtype = T.xtype WHERE (O.name = your_table_name ) ORDER BY C.colid
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
vicky3189
一般會員 發表:1 回覆:5 積分:1 註冊:2007-07-19 發送簡訊給我 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
vicky3189
一般會員 發表:1 回覆:5 積分:1 註冊:2007-07-19 發送簡訊給我 |
意思是目前我用ADO的OPENSCHEMA已可以取得ORACLE及INFORMIX的結構了
尚還有問題一找不到決解方法 問題一:用ADO的OPENSCHEMA取得欄位結構後 MS SQL 的decimal和numeric無法分別,因回傳的DATA_TYPE都是131 有些還可以用COLUMN_FLAGS來區別,但若連COLUMN_FLAGS都一樣就不知怎麼分判了 如:MS SQL 的decimal和numeric無法分別,因回傳的DATA_TYPE都是131 MSSQL用siProviderTypes取得如下,很多都一樣,和siColumns取得的DATA_TYPE對應要怎麼對哩 6:ftype := 'money'; 11:ftype := 'bit'; 12:ftype := 'sql_variant'; 17:ftype := 'tinyint'; 20:ftype := 'bigint'; 72:ftype := 'uniqueidentifier'; 128:ftype := 'binary'; 128:ftype := 'timestamp'; 128:ftype := 'image'; 128:ftype := 'varbinary'; 129:ftype := 'char'; 129:ftype := 'text'; 129:ftype := 'varchar'; 130:ftype := 'nchar'; 130:ftype := 'xml'; 130:ftype := 'ntext'; 130:ftype := 'nvarchar'; 131:ftype := 'decimal'; 131:ftype := 'numeric'; 135:ftype := 'smalldatetime'; 135:ftype := 'datetime';
編輯記錄
vicky3189 重新編輯於 2007-08-08 17:41:50, 註解 無‧
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
我無法幫你做測試。這是我以前的程式碼。
for J := 0 To TableX.Columns.Count -1 Do begin ColumnX := TableX.Columns[J]; Case ColumnX.Type_ of adEmpty :S2 := 'Empty'; adTinyInt :S2 := 'TinyInt'; adUnsignedTinyInt :S2 := 'UnsignedTinyInt'; adSmallInt :S2 := '整數'; adInteger :S2 := '長整數'; adBigInt :S2 := 'BigInt'; adUnsignedSmallInt :S2 := 'UnsignedSmallInt'; adUnsignedInt :S2 := 'UnsignedInt'; adUnsignedBigInt :S2 := 'UnsignedBigInt'; adSingle :S2 := '單精度'; adDouble :S2 := '雙精度'; adCurrency :S2 := '貨幣'; adDecimal :S2 := 'Decimal'; adNumeric :S2 := 'Numeric'; adBoolean :S2 := '是/否'; adError :S2 := 'Error'; adUserDefined :S2 := 'UserDefined'; adVariant :S2 := 'Variant'; adIDispatch :S2 := 'IDispatch'; adIUnknown :S2 := 'IUnknown'; adGUID :S2 := 'GUID'; adDate :S2 := '日期/時間'; adDBDate :S2 := 'DBDate'; adDBTime :S2 := 'DBTime'; adDBTimeStamp :S2 := 'DBTimeStamp'; adBSTR :S2 := 'BSTR'; adChar :S2 := 'Char'; adVarChar :S2 := 'VarChar'; adLongVarChar :S2 := '備忘'; adWChar :S2 := 'WChar'; adVarWChar :S2 := '文字'; adLongVarWChar :S2 := '備忘'; adBinary :S2 := 'Binary'; adVarBinary :S2 := 'VarBinary'; adLongVarBinary :S2 := 'LongVarBinary'; adChapter :S2 := 'Chapter'; adFileTime :S2 := 'FileTime'; adPropVariant :S2 := 'PropVariant'; adVarNumeric :S2 := 'VarNumeric'; end; 上面看來是有 adDecimal 、 adNumeric之區分 我說過了 是透過 Catalog -> Tables -> Cloumns 取得。 你可以查 MSDN 。 有結構表 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
在SQL Server的 線上說明有這麼一段話:
[在 SQL Server 中,numeric 資料型別是 decimal 資料型別的同義字。] 所以小弟大膽的臆測,要單純利用openschema 來判定 是numeric 或 decimal可能作不到 另外如果用openschema(siProviderTypes,VarAraayOf([131,Unassigned]),EmptyParam,adoDataSet)去看 可以發現 numeric及decimal兩個除了名稱以外 唯一的差別在於 numeric 的best_match 是true, decimal則是false
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL
編輯記錄
eaglewolf 重新編輯於 2007-08-08 23:55:48, 註解 無‧
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
vicky3189
一般會員 發表:1 回覆:5 積分:1 註冊:2007-07-19 發送簡訊給我 |
[在 SQL Server 中,numeric 資料型別是 decimal 資料型別的同義字。]
==>是沒錯..但還有其他型別也有同樣的問題, 所以小弟大膽的臆測,要單純利用openschema 來判定 是numeric 或 decimal可能作不到 ==>MS SQL 的decimal和numeric無法分別,因回傳的DATA_TYPE都是131 但我下載Wesly大大的工具程式http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=58250 他郤可分別,可惜那位大大好都沒回我..>< 另外如果用openschema(siProviderTypes,VarAraayOf([131,Unassigned]),EmptyParam,adoDataSet)去看 可以發現 numeric及decimal兩個除了名稱以外 唯一的差別在於 numeric 的best_match 是true, decimal則是false ==>我也有發現,但siColumns取得的相關欄位資訊無法去對應>< |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
vicky3189
一般會員 發表:1 回覆:5 積分:1 註冊:2007-07-19 發送簡訊給我 |
===================引 用 wameng 文 章=================== 據我所知 可以透過三種取得資料結構。 1. Recordset? 2 openschema? 3 Catalog 不清楚對不對。沒什麼映象了。.. 我是有看到李維大師的ADO/MTS/COM 專業程式師計篇是用Catalog啦 但因我是要取結構後,重新建同原資料庫所有物件的完整的資料庫 怕是ADOX的資訊會不夠(PK,KF,INDEX,DEFULT.....等物件) 目前是希望能找到OPENSCHEMA的解法
編輯記錄
vicky3189 重新編輯於 2007-08-09 09:16:35, 註解 無‧
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
Wesly大大已在8/2回覆 http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=58250
並在文章中指出 可以判別 是因為 係透過 MS-SQL的sp_columns STORED_PROCEUDRE 另外 在MS-SQL 2000的說明文件中 (data types-SQL Server, ADO) Mapping Data Types In rowsets and as parameter values, ADO represents data in Microsoft® SQL Server™ 2000 by using the following data types. The ADO enumerated constant, DataTypeEnum, specifies the data type of the Field and Parameter objects.
------
先查HELP 再查GOOGLE 最後才發問 沒人有義務替你解答問題 在標題或文章中標明很急 並不會增加網友回答速度 Developing Tool: 1.Delphi 6 2.Visual Studio 2005 3.Visual Studio 2008 DBMS: MS-SQL |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
vicky3189
一般會員 發表:1 回覆:5 積分:1 註冊:2007-07-19 發送簡訊給我 |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
eaglewolf
資深會員 發表:4 回覆:268 積分:429 註冊:2006-07-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |