저는 SQL Server를 사용하여 델파이 7의 테이블에서 일부 필드를 업데이트하는 프로그램을 개발하고 있습니다. 프로그램은 다음과 같이 진행됩니다쿼리는 SQL Server 관리 스튜디오 2008에서 작동하지만 델파이에서는 작동하지 않습니다
sql := 'UPDATE tb_dt_contract SET '
+' id_schedule = '+quotedstr(label_id_schedule.Caption)
+',start_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_start.Date))
+',finish_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_finish.Date))
+',contract_location = '+quotedstr(uppercase(Edit_location.Text))
+',sign_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_sign.Date))
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;
내가 프로그램을 실행할 때, 그것은 나에게 오류를 제공합니다 : '근처의 구문이 잘못되었습니다'= ''를. 하지만 showmessage를 사용하여 쿼리를보고 SQL Server 2008에서 실행하면 정상적으로 작동합니다.
는이 같은 부분으로 쿼리를 분할하려고 :
SQL := 'UPDATE tb_dt_contract SET '
+' id_schedule = '+QUOTEDSTR(label_id_schedule.CAPTION)
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;
SQL := 'UPDATE tb_dt_contract SET '
+' start_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_start.Date))
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;
SQL := 'UPDATE tb_dt_contract SET '
+' finish_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_finish.Date))
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;
SQL := 'UPDATE tb_dt_contract SET '
+' contract_location = '+quotedstr(uppercase(edit_location.Text))
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;
SQL := 'UPDATE tb_dt_contract SET '
+' sign_date = '+quotedstr(formatdatetime('mm/dd/yyyy',DateTime_sign.Date))
+' WHERE id = '+quotedstr(label_id.Caption);
ADOQuery1.Close;
ADOQuery1.SQL.Text := sql;
ADOQuery1.ExecSQL;
다음 내가 날짜 유형 필드를 업데이트 할 때 그것은 단지 오류를 트리거 것을 알아 냈다. 비슷한 쿼리를 사용하여 다른 테이블을 업데이트하는 다른 프로그램을 개발하고 잘 작동합니다. 프로젝트를 닫고 다시 시도했지만 여전히 그 오류 메시지를 제공합니다.
확실히 'mm/dd/yyyy'는 신뢰할 수있는 형식이 아닙니다 (월과 일을 바꿀 수 있음). 'yyyymmdd'를 미래가 – ErikE
오? SQL 서버에서 날짜 형식을 편집 할 수 있습니까? datetime에 대해 SQL 서버에서 사용 된 형식이라고 생각하여 mm/dd/yyyy를 사용 했습니까? – dapidmini
아니요. 유효한 가정이 아닙니다. – ErikE