내가 테스트하는 동일한 환경을 가지고, 그렇게하지 않는에게 결과가 다를 수 있습니다
ADQuery.Close;
ADQuery.SQL.Text := 'CREATE TABLE MyTable (Col NUMERIC)';
ADQuery.ExecSQL;
ADQuery.Close;
ADQuery.SQL.Text := 'INSERT INTO MyTable (Col) VALUES (:Val)';
ADQuery.Params[0].Value := TTime(EncodeTime(1, 2, 3, 4));
ADQuery.ExecSQL;
ADQuery.Close;
ADQuery.SQL.Text := 'SELECT Col FROM MyTable';
ADQuery.Open;
이 결과는 가져온 테이블 필드 유형 ftLargeint
이었다 그 값은 0 그래서 그냥 잃어버린이었다이었다 : 당신을 위해,하지만 AnyDAC의 이전 버전과 델파이 XE3에서 나는이 간단한 테스트를 실행 이 코드로 귀하의 가치. FireDAC은 다행스럽게도 더 나은 접근 방식을 제공합니다. 이 같은 정의 TIME
필드 유형 테이블을 만들 수 있습니다
CREATE TABLE MyTable (Col TIME)
당신이 다음 기본적으로되는 등의 필드에 액세스 할 수 있도록 FireDAC 내부적하는 dtTime
필드 유형 (이 this topic
에 설명되어 있습니다)에 같은 데이터 형식 매핑 예 :
ADQuery.Close;
ADQuery.SQL.Text := 'CREATE TABLE MyTable (Col TIME)';
ADQuery.ExecSQL;
ADQuery.Close;
ADQuery.SQL.Text := 'INSERT INTO MyTable (Col) VALUES (:Val)';
ADQuery.Params[0].AsTime := TTime(EncodeTime(1, 2, 3, 4));
ADQuery.ExecSQL;
ADQuery.Close;
ADQuery.SQL.Text := 'SELECT Col FROM MyTable';
ADQuery.Open;
ShowMessage(FormatDateTime('hh:nn:ss.zzz', ADQuery.Fields[0].AsDateTime));
컴파일러에서 알려주는 정확한 오류는 무엇입니까? 오류 메시지를 제공하지 않았기 때문에 코드가 컴파일되지 않는다고 가정합니다 (SQLite 또는 FireDAC을 사용한 적이 한번도 없습니다). 이 정보를 제공하지 않으면 타사 도구를 절대 사용하지 않는 저 같은 사람들은 대답 할 수 없습니다. 그러나 그 간단한 오류 메시지로, 나는 당신의 질문에 대답 할 수있을 것입니다. –
SQLite 시간 필드를'NUMERIC'이 아닌'TIME'으로 만드십시오. ([여기는 FireDAC 매핑입니다.] (http://docwiki.embarcadero.com/RADStudio/XE7/en/Using_SQLite_with_FireDAC#Mapping_SQLite_to_FireDAC_Data_Types)). 그러면 AsTime 또는 AsDateTime 캐스팅을 편안하게 사용할 수 있습니다. – TLama
@ JerryDodge : 오류 메시지가 없습니다. 위의 코드를 사용할 때 Field of Value는 0으로 설정됩니다. 그러나 읽기 작업 : SeTime.Text : = FDQuery1.Fields [1] .AsString; – LuMa