如何將遠程SQL動態查詢結果保存到本地Access數據庫中?(50分)

  • 主题发起人 主题发起人 nylx
  • 开始时间 开始时间
N

nylx

Unregistered / Unconfirmed
GUEST, unregistred user!
如題<br>我的客戶端用了TDataset控件作為動態多表連結查詢用,我想把從遠程SQL數據庫中動態查詢到的數據保存到本地Access(臨時表)中,並且能及時更新Access表,請高手賜教!<br>PS:解答請盡量詳盡些<br>謝謝!
 
我自己的方法是:<br>var<br> &nbsp;i: Iteger;<br>begin<br> &nbsp;with TADODataset1 do &nbsp;//TADODataSet1連結遠程SQL的數據集<br> &nbsp;begin<br> &nbsp; &nbsp;if Active then Close;<br> &nbsp; &nbsp;//a_table,b_table,c_table,a1,b1,c1分別為遠程SQL數據庫中的表、字段名<br> &nbsp; &nbsp;CommandText := 'select a.a1,b.b1,c.c1 from a_table a'+<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'left join b_table b on a.a1=b.a1 and b.b1=a.b1'+<br> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 'left join c_table c on b.b1=c.b1';<br> &nbsp; &nbsp;Open;<br> &nbsp;end;<br> &nbsp;with TADODataSet2 do //TADODataSet2連結本地Access數據庫的臨時數據集<br> &nbsp;begin<br> &nbsp; &nbsp;if Active then Close;<br> &nbsp; &nbsp;//d_table為本地Access數據庫的表名<br> &nbsp; &nbsp;CommandText := 'select a1,b1,c1 from d_table';<br> &nbsp; &nbsp;Open;<br> &nbsp;end;<br> &nbsp;while not ADODataset1.Eof do &nbsp;//遍歷數據集ADODataSet1,一條條寫進ADODataset2<br> &nbsp;//對於大量的數據查詢,這種方法勢必會出現Timeout想象,故不可取!<br> &nbsp;begin<br> &nbsp; &nbsp;ADODataset2.Append;<br> &nbsp; &nbsp;for i:=0 to ADODataSet1.Fields.Count - 1 do<br> &nbsp; &nbsp; &nbsp;ADODataset1.Fields.AsString := ADODataset2.Fields.AsString;<br> &nbsp; &nbsp; &nbsp;ADODataSet2.Post;<br> &nbsp; &nbsp; &nbsp;ADODataSet1.Next;<br> &nbsp;end;<br>end;<br>請教高手們,有沒有更好的方法啊???
 
問題擱這都2天了,怎麼還沒有人回復我啊,郁悶~~~~~~~~~~~~~~~!<br>To:二位版主(qince, luyear )<br> &nbsp; &nbsp;是不是因為我的問題太菜或者問題沒有表述清楚,不值得眾高手回復還是因為我是個新人,我真的感到好傷悲!大家一起相聚於DelphiBBS,是緣分使然,我們來DelphiBBS的主要目的是學習、交流,一起攜手進步,甚至可以結交自己志同道合的好朋友,可是。。。。。<br><br>無語~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
方法一、用Delphi的BatchMove控件;<br>方法二、先将查询结果保存成本地的Excel文件,然后再转换为Access数据库。
 
非常謝謝Johnny_du啦,盡管你說的方法不能解決我的問題,可是我還是要感謝你的熱情和友好!<br>Johnny_du,我現在做的是一種類似於DSS的系統,須要從不同類型的數據庫動態獲取數據,因為須要取不同數據庫中的多表作綜合查詢,所以我想把一些臨時查詢結果保存到本地客戶端,作為當前操作產生的報表、圖表的數據源;另外,我用自己上面的方法在清除Access表記錄時,發現數據庫大小沒有變化,這樣就導致我每查詢一次,Access數據庫大小就累加一次,不知是不是操作方法不當?<br>歡迎高人不吝賜教,小弟將感激不盡!
 
我知道了其实你是想要实现简单的DW或者ODS的初级功能对吗?其实,创建该类系统的主要难题应该是数据的标准化、数据清洗和数据质量确认问题,而经过上述过程的数据的存储并不应该是问题(或者说是重点)所在。而且对于DW或ODS来说把大量数据存在本地机器的临时表上也是不明智的选择(因为一方面数据量很大,另一方面耗费资源严重。这两方面都是PC所无法承受的)。所以构建DW(DataWarehouse)或ODS(Operation Data Store)和基于其上的DM(Data Mining)系统还是要建立基于服务器的方式(最好是SMP机或机群)。<br>以上是我的一点点建议,不知是否对楼主有所帮助...
 
To:Johnny_du<br>是的,我是想實現一些DSS的初級功能,所以作法並不專業<br>今天我在網上找到一些資料,要實現我這樣的功能,比較專業的做法是使用:DTS做數據的提取、校驗、清理和轉換;使用MS 的Analysis Service作為OLAP引擎,在此基礎上進行數據分析,挖掘和管理。<br>謝謝你的友好建議,對偶還是有所幫助的!
 
接受答案了.
 
后退
顶部