三層式 ASP+COM1呼叫COM2執行SQLSERVER問題 |
答題得分者是:jieshu
|
o.s
一般會員 發表:39 回覆:36 積分:15 註冊:2003-05-24 發送簡訊給我 |
各位前輩你好這是有關三層式架構的問題我們是做一個從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 發送簡訊給我 |
引言: 1.ASP要怎連COM2更新的ASP語法? 2.不知是否我COM2部分的UPDATE指令有錯? 3.COM2部分的ttSQLStr:='updatexxxxxxx';我要如何下只要查找欄位第一筆資料VoteC就可找出並更新有關第二筆UserID和第三筆VotePW的資料呢?1.不懂, 連那麼多層不是拖慢速度嗎? 除非您有辦法做到分散處理, 且是load balancing. 2.明顯的SQL語法錯誤, 應是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; 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/ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |