Insufficient memory for this operation |
|
kan0515
中階會員 發表:56 回覆:120 積分:50 註冊:2002-06-24 發送簡訊給我 |
我想將excel中的資料讀出
寫入access中
但是不知道為何出現此問題
麻煩大家幫我看看,謝謝
附加檔案:00019947_excel.zip
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
1. 內含一TCoolForm未附上忽略此元件 2. 紅色部分不正確,原Comment之部分才對 3. 雙引號改為單引號後可執行 // sql:='Insert INTO file(DirId,FileId,File) Values';// (:filed[1], :filed[2],:filed[3],:filed[4],:filed[5],:filed[6]';
sql:='Insert INTO file(DirId,FileId,File,KeyWord,Script,Fav) Values';// (:filed[1], :filed[2],:filed[3],:filed[4],:filed[5],:filed[6]';
//將資料寫入access中
sql:=sql '(''' field[1];
sql:=sql ''',''' field[2];
sql:=sql ''',''' field[3];
sql:=sql ''',''' field[4];
sql:=sql ''',''' field[5];
sql:=sql ''',''' field[6] ''')';
Query1.Sql.Add(sql);
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
引言: 1. 內含一TCoolForm未附上忽略此元件, 刪除之 2. 紅色部分不正確,原Comment之部分才對 3. 雙引號改為單引號後可執行,看不到你說的問題 4. 是否為TCoolForm造成? // sql:='Insert INTO file(DirId,FileId,File) Values';// (:filed[1], :filed[2],:filed[3],:filed[4],:filed[5],:filed[6]'; sql:='Insert INTO file(DirId,FileId,File,KeyWord,Script,Fav) Values';// (:filed[1], :filed[2],:filed[3],:filed[4],:filed[5],:filed[6]'; //將資料寫入access中 sql:=sql '(''' field[1]; sql:=sql ''',''' field[2]; sql:=sql ''',''' field[3]; sql:=sql ''',''' field[4]; sql:=sql ''',''' field[5]; sql:=sql ''',''' field[6] ''')'; Query1.Sql.Add(sql); |
kan0515
中階會員 發表:56 回覆:120 積分:50 註冊:2002-06-24 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
|
kan0515
中階會員 發表:56 回覆:120 積分:50 註冊:2002-06-24 發送簡訊給我 |
|
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
引言: 可是我的odbc是在程式設定的 所以就沒有使用到tdatabase這個元件 能不能在odbc宣告時就設定或是寫在程式中呢還是可以使用TDatabase元件, 放一個DataBase元件, aliasName=MS Access 97 Database 任意設一個DataBaseName, query之databasename填入此database.databasename procedure TForm1.SetupODBC; var Driver,Attributes:string; begin // 建立一個 ODBC_NAME 指向 Access的 dream.mdb Driver := 'Microsoft Access Driver (*.mdb)'; Attributes := 'DSN=ODBC_NAME;' 'dbq=dream.mdb'; if SQLConfigDataSource(0, 4, PChar(Driver), PChar(Attributes)) then with database1 do begin CLOSE; params.Clear; params.Add('ODBC DSN=ODBC_NAME'); loginprompt:=false; try open; except on E:Exception do showmessage(E.message); end; end //howmessage('資料庫設定成功') else showmessage('資料庫設定失敗'); end;[NOTE]為何不改用ADO, Excel, .mdb均用ADO連, 效率好太多了 |
ccchen
版主 發表:61 回覆:940 積分:1394 註冊:2002-04-15 發送簡訊給我 |
提供使用ADO之方式供你參考, 不須open Excel, 不須Runtime Create ODBC
DesignTime加入一TADOQuery (用來連.mdb)
連Excel之ADOQuery Runtime create
... var form1:TForm1; ExcelConnectStr : string; //用來連Excel檔之字串 implementation {$R *.DFM} //輸入Excel之檔, Create一ADOQuery function OpenXlsAsADO(owner:TComponent;fname:string;sheetname:string='sheet1'):TAdoQUery; var s,sht:string; begin Result:=TAdoQuery.Create(owner); try s:=AnsiReplaceStr(ExcelConnectstr, 'xxx.xls', fname); Result.ConnectionString:=s; sht:='[' SheetName '$' ']'; Result.sql.text:='select * from ' sht; Result.open; except result.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); var sql:string; ADOQ:TADOQuery; begin if OpenDia1.execute then begin ADOQ:=OpenXlsAsADO(self,OpenDia1.filename); //open .xls檔成ado // adoquery1連向 .mdb AdoQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;' 'Data Source=D:\bbb\dream.mdb;Persist Security Info=False'; ADOQ.first; while not ADOQ.eof do begin sql:='Insert INTO file(DirId,FileId,File,KeyWord,Script,Fav) Values'; sql:=sql '(''' adoq.Fields[0].asstring; sql:=sql ''',''' adoq.Fields[0].asstring; sql:=sql ''',''' adoq.Fields[0].asstring; sql:=sql ''',''' adoq.Fields[0].asstring; sql:=sql ''',''' adoq.Fields[0].asstring; sql:=sql ''',''' adoq.Fields[0].asstring ''')'; AdoQuery1.SQL.Text:=sql; AdoQuery1.ExecSQL; AdoQ.Next; end; adoq.free; end; end; initialization //連Excel之樣板字串 ExcelConnectstr:='Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;' 'Data Source=xxx.xls;' 'Mode=Share Deny None;Extended Properties=Excel 8.0;' 'Persist Security Info=False;Jet OLEDB:System database="";' 'Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";' 'Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;' 'Jet OLEDB:Global Partial Bulk Ops=2;' 'Jet OLEDB:Global Bulk Transactions=1;' 'Jet OLEDB:New Database Password="";' 'Jet OLEDB:Create System Database=False;' 'Jet OLEDB:Encrypt Database=False;' 'Jet OLEDB:Don''t Copy Locale on Compact=False;' 'Jet OLEDB:Compact Without Replica Repair=False;' 'Jet OLEDB:SFP=False'; end. |
kan0515
中階會員 發表:56 回覆:120 積分:50 註冊:2002-06-24 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |