[英]Delphi SQL integration using UPDATE
我在Delphi中有一個數據庫應用程序,我正在嘗試打開一條記錄並更新它。 以下是我現在的操作方式:
procedure TWebsiteRecord.UpdateRecord(Website : TWebsite);
var
SQL : string;
begin
RecordQuery.SQL.Clear;
SQL := 'UPDATE website SET Domain=:D, Template=:T, WebHost=:Wh, DomainRegistrar=:Dr, OrderDate=:Od, RenewalDate=:Rd, RenewalCost=:Rc, PaymentMethod=:Pm,' + 'OwnDomainStatus=:OStat, CancellationStatus=:CStat, ReminderStatus=:RStat, WebsiteNotes=:N, FTPUsername=:U1, FTPPassword=:P1, EmailPassword=:P2, PaidForYear=:PStat, CustomerID=:CID WHERE WebsiteID=:WID;';
RecordQuery.ParamCheck := True;
RecordQuery.SQL.Add(SQL);
RecordQuery.Params.ParamByName('D').AsString := Website.D;
RecordQuery.Params.ParamByName('T').AsString := Website.T;
RecordQuery.Params.ParamByName('Wh').AsString := Website.Wh;
RecordQuery.Params.ParamByName('Dr').AsString := Website.Dr;
RecordQuery.Params.ParamByName('Od').AsString := Website.Od;
RecordQuery.Params.ParamByName('Rd').AsString := Website.Rd;
RecordQuery.Params.ParamByName('Rc').AsInteger := Website.Rc;
RecordQuery.Params.ParamByName('Pm').AsString := Website.Pm;
RecordQuery.Params.ParamByName('OStat').AsInteger := Website.OStat;
RecordQuery.Params.ParamByName('CStat').AsString := Website.Cstat;
RecordQuery.Params.ParamByName('RStat').AsString := Website.Rstat;
RecordQuery.Params.ParamByName('N').AsString := Website.N;
RecordQuery.Params.ParamByName('U1').AsString := Website.U1;
RecordQuery.Params.ParamByName('P1').AsString := Website.P1;
RecordQuery.Params.ParamByName('P2').AsString := Website.P2;
RecordQuery.Params.ParamByName('PStat').AsInteger := Website.PStat;
RecordQuery.Params.ParamByName('CID').AsInteger := Website.CID;
RecordQuery.Params.ParamByName('WID').AsInteger := Website.WID;
RecordQuery.ExecSQL;
end;
和
procedure TWebsiteRecord.SaveBtnClick(Sender: TObject);
var
Website : TWebsite;
begin
if Validate then
begin
Website.D := DomainEdit.Text;
Website.T := TemplateEdit.Text;
Website.Wh := WebHostEdit.Text;
Website.Dr := DomainRegEdit.Text;
Website.Od := GetSQLDate(Date1Edit.Text);
Website.Rd := GetSQLDate(Date2Edit.Text);
if Website.Rd = '' then Website.Rd := '70/01/19';
if CostEdit.Text = '' then website.Rc := 0
else Website.Rc := strtoint(CostEdit.Text);
Website.Pm := GetPaymentMethod(PaymentMethodCombo.ItemIndex);
Website.OStat := integer(OwnDomainCheck.Checked);
if PendingCheck.Checked then Website.Cstat := 'P'
else if CancelledCheck.Checked then Website.Cstat := 'C'
else Website.Cstat := 'A';
Website.Rstat := GetSent(ReminderStatusCombo.ItemIndex);
Website.N := NotesMemo.Text;
Website.U1 := FTPUserEdit.Text;
Website.P1 := FTPPassEdit.Text;
Website.P2 := EmailPassEdit.Text;
Website.PStat := integer(PaidCheck.Checked);
Website.CID := strtoint(CustIDEdit.Text);
UpdateRecord(Website);
messagedlg('Website successfully updated, You will now be returned to the website table',mtinformation,[mbOK],0);
WebsiteTable.WebsiteCDS.Refresh;
Free;
end;
end;
執行此操作時不會引起任何錯誤,但是記錄不會更新,並且與以前完全相同。 有人知道這個問題嗎? IIf,那我該怎么辦。 如果需要,我可以提供更多代碼。 提前致謝
如我所見,您的主要問題是您不知道服務器執行了什么確切的查詢。
它似乎有點過時,但是如果我是我,那么我將使用普通的FORMAT()函數調試查詢,並查看傳遞給服務器的確切信息。 在這種情況下,您的代碼將是這樣的:
SQL := FORMAT('UPDATE website SET Domain="%s", Template="%s", WebHost="%s", DomainRegistrar="%s", OrderDate="%s", RenewalDate="%s", RenewalCost=%d, PaymentMethod="%s",' +
'OwnDomainStatus=%d, CancellationStatus="%s", ReminderStatus="%s", WebsiteNotes="%s", FTPUsername="%s", FTPPassword="%s", EmailPassword="%s", PaidForYear=%d, CustomerID=%d WHERE WebsiteID=%d',
[
RecordQuery.Params.ParamByName('D').AsString,
RecordQuery.Params.ParamByName('T').AsString,
RecordQuery.Params.ParamByName('Wh').AsString,
RecordQuery.Params.ParamByName('Dr').AsString,
RecordQuery.Params.ParamByName('Od').AsString,
RecordQuery.Params.ParamByName('Rd').AsString,
RecordQuery.Params.ParamByName('Rc').AsInteger,
RecordQuery.Params.ParamByName('Pm').AsString,
RecordQuery.Params.ParamByName('OStat').AsInteger,
RecordQuery.Params.ParamByName('CStat').AsString,
RecordQuery.Params.ParamByName('RStat').AsString,
RecordQuery.Params.ParamByName('N').AsString,
RecordQuery.Params.ParamByName('U1').AsString,
RecordQuery.Params.ParamByName('P1').AsString,
RecordQuery.Params.ParamByName('P2').AsString,
RecordQuery.Params.ParamByName('PStat').AsInteger,
RecordQuery.Params.ParamByName('CID').AsInteger,
RecordQuery.Params.ParamByName('WID').AsInteger
]);
您可以查看查詢,將其記錄在文本文件中,也可以將其復制並粘貼到某處以查看其執行,例如mysql命令提示符或phpmyadmin。
如果您有權訪問服務器的日志文件,則不需要-只需打開它並查看其中的查詢即可。
當然,一旦查詢按預期工作,您可以將其與參數一起使用。 並且取決於您使用的連接類型是什么,可能還有其他(更快)的方法來獲取實際的查詢,例如, 這個問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.