2012-01-20 3 views
3

SQL Server 2008 R2 데이터베이스의 dateTime 열에 날짜를 게시하려고하지만 원인을 알 수없는 많은 문제가 있습니다.SQL Server 2008 R2에서 Delphi 업데이트 DateTime 열

먼저이 코드를 사용했지만 오류가 발생했습니다. 문자열을 날짜로 변환 할 수 없습니다.

ADOOF.SQL.Text:='UPDATE OFTab SET CA='''+ CA.Text + ''', demandeClient=''' + DateTimeToStr(demandeClient.DateTime) + ''' WHERE ID='''+ ADOOF.FieldByName('ID') + ''''; 
ADOOF.ExecSQL; 

둘째, 나는 매개 변수를 사용하고 있습니다 :

ADOOF.SQL.Text:='UPDATE OFTab SET CA='''+ CA.Text + ''', demandeClient=:demande_client WHERE ID='''+ ADOOF.FieldByName('ID') + ''''; 
ADOOF.Parameters.ParamByName('demande_client').Value:= demandeClient.Date; 
ADOOF.ExecSQL; 

을하지만 오류 가지고 : 매개 변수 (demande_client) 찾을 수 없습니다.

나는이 문제를 봤와 나는 parametres이 같은 ADOQuery를 호출하기 전에 만들 수 sould 말하는 엠바 카데로에 의해 제안을 발견
ADOOF.SQL.Text:='UPDATE OFTab SET CA='''+ CA.Text + ''', demandeClient=:demande_client WHERE ID='''+ ADOOF.FieldByName('ID') + ''''; 
ADOOF.Parameters.ParseSQL(ADOOF.SQL.Text, True);  
ADOOF.Parameters.ParamByName('demande_client').Value:= demandeClient.Date; 
ADOOF.ExecSQL; 

는 미세 나는 연결이 보안 정보하지만 항상 동일한 문제가 지속 제거. 제발, 어떤 제안.

INFO : SQL Server 용 MICROSOFT OLE DB 공급자를 사용하고 있습니다.

+0

구성 요소는 없지만 원시 SQL 실행을 원하면 [우리의 오픈 소스 클래스] (http://blog.synopse.info/post/2011/06)를 살펴보십시오./27/SynOleDB % 3A-OpenSource-Unit-Direct-Access-to-any-OleDB를 통한 데이터베이스) SQL 서버 직접 액세스에 최적화되어 있습니다 (ADO, DB.pas 유닛 및 기타). 그것은 'Connection.ExecuteNoResult ('UPDATE OFTAB SET CA = ?, demandeClient =? WHERE ID =? ', [CA.Text, demandeClient.DateTime, ADOOF.FieldByName ('ID ')])와 같은'TDateTime' 매개 변수를 직접 처리합니다. . –

답변

5

는 DateTimeToStr이 formatsettings없이 지역화 된 시스템 설정을 사용하여 데이터베이스 단지 또는 형식을 좋아하지 않을 수도 있기 때문입니다

FormatDateTime('YYYYMMDD hhmmss',demandeClient.DateTime) 

대신

DateTimeToStr(demandeClient.DateTime) 

의 사용합니다. FormatDateTime을 사용하면 모호함을 없앨 수 있습니다. 01/02/03을 고려해보십시오. 일부 사람들은 2003 년 1 월 2 일이지만 다른 사람들은 2003 년 2 월 1 일이고 어떤 사람들은 2001 년 2 월 3 일까지 februari 3을 말할 것입니다. YYYYMMDD는 보편적입니다. 20030201은 항상 2003 년 2 월 1 일입니다.

+0

로컬 시스템이나 서버 날짜 형식을 모르기 때문에 날짜 형식화를 사용하지 마십시오. –

+1

데이터베이스에 날짜를 넣을 때 항상 YYYYMMDD 형식을 사용해야하는 이유는 ISO 표준입니다. 로컬 설정을 알 필요가 없습니다. –

+0

날짜 만 사용하는 경우 FormatDateTime ('YYYYMMDD', TDate)도 작동합니다. –

2

DB (드라이버)에 연결하는 방법에 따라 달라질 수 있습니다.
당신은 당신이 날짜를 사용하는 것을 명시 적으로 시도 할 수 있습니다 :

ADOOF.Parameters.ParamByName('demande_client').DataType:= ftDateTime; 
ADOOF.Parameters.ParamByName('demande_client').AsDateTime:= demandeClient.Date; 
+1

+1 특정 'As ...'메소드를 사용할 때 DataType을 설정해야하는 경우 확실하지 않습니다. –

+0

필요하지 않습니다. –

1
  1. 난 강력하게 당신이 SQL 서버 2008 R2와 함께 작업 할 때 SQL 네이티브 클라이언트 (11)를 사용하는 것이 좋습니다 것입니다. 새 SQL Server 2008 데이터 형식 (DATE, TIME, DATETIME2DATETIMEOFFSET)은 SQL Server 2000 OLEDB 공급자에서 지원되지 않습니다.
  2. 두 번째 코드 샘플이 작동해야합니다. TADOQuery이 있는지 확인하십시오. ParamCheck = 참. 첫 번째 예에서
+0

서버에 원격으로 연결하는 네트워크 응용 프로그램 인 SQL Native Client를 사용할 수 없습니다. SQL Server OLEDB 공급자를 사용하고 있습니다. –

+1

왜 안되나요?SQLNC를 설치하고 연결 문자열에 지정해야합니다. 그건 맞을 것입니다 ... –

관련 문제