線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1407
推到 Plurk!
推到 Facebook!

三層式 ASP+COM1呼叫COM2執行SQLSERVER問題

答題得分者是:jieshu
o.s
一般會員


發表:39
回覆:36
積分:15
註冊:2003-05-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-09-07 12:10:40 IP:210.70.xxx.xxx 未訂閱
各位前輩你好這是有關三層式架構的問題我們是做一個從WEB端 COM1再呼叫COM2再呼叫SQLSERVER的一個案子基本上我們以解決新增查詢刪除等功能唯獨更新不能正常RUN出而我們又有一個問題是ASP要怎樣連COM2更新的語法呢?問題如下 1.ASP要怎連COM2更新的ASP語法? 2.不知是否我COM2部分的UPDATE指令有錯? 3.COM2部分的ttSQLStr:='updatexxxxxxx';我要如何下只要查找欄位第一筆資料VoteC就可找出並更新有關第二筆UserID和第三筆VotePW的資料呢? COM2 SORCE和ASP SORCE如下: unit Unit1; {$WARN SYMBOL_PLATFORM OFF} interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComServ, ComObj, VCLCom, StdVcl, bdemts, DataBkr, DBClient, variants, MtsRdm, Mtx, Project1_TLB, MConnect, SConnect, DB, ADODB; type Tadddata = class(TMtsDataModule, Iadddata) ADOConnection1: TADOConnection; ADOCommand1: TADOCommand; ADODataSet1: TADODataSet; SocketConnection1: TSocketConnection; private { Private declarations } protected class procedure UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); override; procedure xqry(var ppCount, ppArr, ppRetStr: OleVariant); safecall; procedure update(var pppCount, pppArr, pppRet: OleVariant); safecall; public { Public declarations } end; var adddata: Tadddata; implementation {$R *.DFM} class procedure Tadddata.UpdateRegistry(Register: Boolean; const ClassID, ProgID: string); begin if Register then begin inherited UpdateRegistry(Register, ClassID, ProgID); EnableSocketTransport(ClassID); EnableWebTransport(ClassID); end else begin DisableSocketTransport(ClassID); DisableWebTransport(ClassID); inherited UpdateRegistry(Register, ClassID, ProgID); end; end; //------------------------------ 重點是這段UPDATE //----------------------------------------更新開始 procedure Tadddata.update(var pppCount, pppArr, pppRet: OleVariant); var ttErrStr, ttSQLStr:string; tcount:integer; begin ttErrStr:=''; try ttSQLStr:= 'UPDATE Voter Set UserID,VotePW=(''' pppCount ''')'; ADODataSet1.Close; ADODataSet1.CommandText:=ttSQLStr; tcount:=0; try ADODataSet1.Open; tcount:=ADODataSet1.RecordCount; ADODataSet1.First; Except on E:exception do begin ttErrStr:=ttErrStr '-' ttSQLStr ':' E.Message; end; end; if tcount>0 then begin pppArr:=VarArrayCreate([0,2,0,tcount-1],VarVariant); tcount:=0; while not ADODataSet1.Eof do begin pppArr[0,tcount]:=ADODataSet1.FieldByName('VoteC').AsInteger; pppArr[1,tcount]:=ADODataSet1.FieldByName('UserID').AsString; pppArr[2,tcount]:=ADODataSet1.FieldByName('VotePW').AsString; inc (tcount); ADODataSet1.Next; end; end; pppCount:=tcount; if ttErrStr='' then begin pppRet:= 'OK' pppRet; SetComplete; end else begin pppRet:='-' pppRet '-xqry-E' ttErrStr; SetAbort; end; Except on E:exception do begin pppRet:='-' pppRet '-xqry-X' e.Message; SetAbort; end; end; end; //-----------------更新結束 //------------------------------------------- 查詢唯一紀錄開始 procedure Tadddata.xqry(var ppCount, ppArr, ppRetStr: OleVariant); var ttErrStr, ttSQLStr : string; ttCount : integer; begin ttErrStr := ''; try ttSQLStr := 'SELECT * FROM Voter Where VoteC Like (''' ppCount ''')'; ADODataSet1.Close; ADODataSet1.CommandText := ttSQLStr; ttCount := 0; try ADODataSet1.Open; ttCount := ADODataSet1.RecordCount; ADODataSet1.First; except on E:Exception do begin ttErrStr := ttErrStr '-' ttSQLStr ':' E.Message; end; end; if ttCount>0 then begin ppArr := VarArrayCreate([0,2,0,ttCount-1], VarVariant); ttCount := 0; while not ADODataSet1.Eof do begin ppArr[0, ttCount] := ADODataSet1.FieldByName('VoteC').AsString; ppArr[1, ttCount] := ADODataSet1.FieldByName('UserID').AsString; ppArr[2, ttCount] := ADODataSet1.FieldByName('VotePW').AsString; inc(ttCount); ADODataSet1.Next; end; end; ppCount := ttCount; if ttErrStr='' then begin ppRetStr := 'OK' ppRetStr; SetComplete; end else begin ppRetStr := '-' ppRetStr '-xQry-E' ttErrStr; SetAbort; end; Except on E:Exception do begin ppRetStr := '-' ppRetStr '-xQry-X' E.Message; SetAbort; end; end; end; //----------------------------------------------------查詢唯一字串欄位結束 感謝版主的指導 不會的地方請多多指教我喔呵 成功了可以摟謝摟com部分沒問題是語法錯了 http://www.taconet.com.tw/alen720322/aspdir/ 發表人 - o.s 於 2004/09/07 14:05:36 發表人 - o.s 於 2004/09/07 20:12:07
jieshu
版主


發表:42
回覆:894
積分:745
註冊:2002-04-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-09-07 13:46:32 IP:203.204.xxx.xxx 未訂閱
引言: 1.ASP要怎連COM2更新的ASP語法? 2.不知是否我COM2部分的UPDATE指令有錯? 3.COM2部分的ttSQLStr:='updatexxxxxxx';我要如何下只要查找欄位第一筆資料VoteC就可找出並更新有關第二筆UserID和第三筆VotePW的資料呢?
        ttSQLStr:= 'UPDATE Voter Set UserID,VotePW=(''' pppCount ''')';             ADODataSet1.Close;
          ADODataSet1.CommandText:=ttSQLStr;
         tcount:=0;             try               ADODataSet1.Open;                 tcount:=ADODataSet1.RecordCount;                   ADODataSet1.First;
         Except on E:exception do begin
             ttErrStr:=ttErrStr '-' ttSQLStr ':' E.Message;             end;
1.不懂, 連那麼多層不是拖慢速度嗎? 除非您有辦法做到分散處理, 且是load balancing. 2.明顯的SQL語法錯誤, 應是
  ttSQLStr
    := 'UPDATE Voter'
       '   Set UserID = '''   ???   ''''
       '     , VotePW = '''   pppCount   ''''
       ' Where VoteC  = '''   ???   '''';
假設您的VotePW的值是pppCount, 其他???您也要傳資料進來給. 且您新增時是用ADOCommand, 為何更新就用ADODataSet, ADODataSet是不能下Update SQL的, Delphi說明: TADODataSet is not capable of issuing Data Manipulation Language (DML) SQL statements that do not return result sets (like DELETE, INSERT, and UPDATE). 3.您的講法錯誤, 應該是"我要如何下只要查找第一個欄位VoteC的資料就可找出並更新有關第二欄位UserID和第三欄位VotePW的資料呢?", 上面的範例語法就是您要的. <iFrame src="http://www.coss.com.tw/jieshu/sign.htm" width=400 height=105 scolling="NO" border="0"></iFrame> 震江系統(股)公司: http://www.coss.com.tw/ 捷舒軟體設計坊: http://www.coss.com.tw/jieshu/
------
人生有夢,逐夢而行
人若為善,福雖未至,禍已遠離
人若為惡,禍雖未至,福已遠離
http://www.taconet.com.tw/jieshu/
系統時間:2024-04-26 5:36:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!