熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Delphi編程 >> 正文

用AdoDataSet實現數據表的導入導出

2022-06-13   來源: Delphi編程 
    Delphi中的AdoDataSet是支持ADO訪問的主要組件它支持從數據表直接獲取數據支持用SQL語句獲取數據最重要的是它定義和實現了兩個重要的例程

    procedure LoadFromFile(const FileName: WideString);它從文件中加載數據集 
    procedure SaveToFile(const FileName: String = ; Format: TPersistFormat = pfADTG);它將數據集保存到文件中

    Format確定文件中數據集的保存格式可以使用的有pfADTG (Advanced Data Tablegram format)pfXML(Extendable Markup Language)因此AdoDataSet是實現導入導出的良好的基礎

    數據表的導出

    導出數據表的操作如下
    )打開數據表設置需要導出的條件
    )使用AdoDataSet調用SaveToFile導出記錄
    下面是一個導出操作的示例(假定導出指定數據表的全部記錄)
    procedure  ExportData(strFileName strTableName: string);
    begin 
        with AdoDataSet do 
        begin 
            Close; 
            CommandText := select * from + strTableName; 
            Open; 
            SaveToFile(strFileName); 
            Close; 
        end;
    end;

    .數據表的導入

    下面是一個導入操作的示例(假定存在相同主鍵記錄時更新目的表假定數據表為單主鍵字段且其字段類型為字符串型)
    Procedure  ImportData(strFileName strTableName strKeyFieldName: string);
    begin 
        with AdoDataSet do 
        begin 
            Close; 
            LoadFromFile(strFileName); 
            First; 
            While not eof do 
            begin 
                StrKeyValue := FieldByName(strKeyFieldName)AsString; 
                If RecordInDest(strTableName strKeyFieldName strKeyValue) then 
                    begin 
                        AdoDataDestClose; 
                        AdoDataSetDestCommandText := Format(select * from %s where %s=%s[strTableName strKeyFieldName QuotedStr(strKeyValue)]); 
                        AdoDataSetDestOpen; 
                        AdoDataSetDestFirst; 
                        AdoDataSetDestEdit; 
                        for I:= to FieldListCount do 
                            AdoDataSetDestFields[I] := Fields[I]; 
                            AdoDataSetDestPost; 
                    end 
                else         // 添加記錄 
                    begin 
                        AdoDataDestClose; 
                        AdoDataSetDestCommandText := Format(select * from %s where =[strTableName]);  // 獲取字段列表 
                        AdoDataSetDestOpen; 
                        AdoDataSetDestInsert; 
                        for i:= to FieldListCount do 
                            AdoDataSetDestFields[i] := Fields[i]; 
                            AdoDataSetDestPost; 
                    end; 
                    Next; 
                end; 
            end; 
            // 判斷指定主鍵值的記錄在表中是否存在 
            function RecordInDest(strTableName strKeyFieldName strKeyValue: string): boolean; 
            begin 
                with AdoQuery do 
                begin 
                    Close; 
                    SQLClear; 
                    SQLAdd(Format(select count(*) from %s where %s=%s [strTableName strKeyFieldName QuotedStr(strKeyValue)])); 
                    Open; 
                    result := Fields[]AsInteger >
                    Close; 
                end; 
            end;

    如果對數據表的情況進行進一步的考慮並結合更周密的導入導出方案比如導入指定字段導入指定字段導入指定記錄等等對導入導出過程進行更詳細的控制就可以實現強大的通用的數據表的導入導出工具
From:http://tw.wingwit.com/Article/program/Delphi/201311/24706.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.