Вы используете версию DateToStr()
, которая опирается на текущие настройки ОС локали пользователя. БД имеют определенные форматы, в которых они ожидают, что строки даты/времени будут выражены, а настройки локали ОС могут не соответствовать этим форматам. Вы можете использовать перегруженную версию DateToStr()
, которая принимает TFormatSettings
в качестве входных данных, так что вы можете указать точное форматирование строки вывода (через TFormatSettings.ShortDateFormat
члена):
var
fmt: TFormatSettings;
ExpireDate: string;
fmt := TFormatSettings.Create;
fmt.ShortDateFormat := 'yyyy-mm-dd';
ExpireDate := DateToStr(IncYear(Today,1), fmt);
Кроме того, даты/время строке должны быть завернут в цитаты в операторах SQL. Вы можете использовать функцию QuotedStr()
для этой цели.
Но что еще более важно, ваш INSERT
заявление искажен в любом случае.
Если вы пытаетесь добавить новую запись, он должен выглядеть следующим образом, вместо:
datamodule1.qryDB1.SQL.Text := 'INSERT INTO table (Member_ID, Member_ExpireDate) VALUES (' + SomeIDValue + ', ' + QuotedStr(ExpireDate) + ')';
В противном случае, если вы пытаетесь изменить существующую запись, вам нужно использовать UPDATE
заявление вместо:
datamodule1.qryDB1.SQL.Text := 'UPDATE table SET Member_ExpireDate = ' + QuotedStr(ExpireDate) + ' WHERE Member_ID = ' + SomeIDValue;
в любом случае, было бы лучше использовать параметризованный запрос вместо. Пусть сама БД обрабатывать все необходимые форматирования для вас:
datamodule1.qryDB1.SQL.Text := 'INSERT INTO table (Member_ID, Member_ExpireDate) VALUES (:MemberID, :ExpireDate)';
datamodule1.qryDB1.ParamByName('MemberID').AsInteger := SomeIDValue; // or whatever data type your field uses
datamodule1.qryDB1.ParamByName('ExpireDate').AsDate := IncYear(Today,1);
datamodule1.qryDB1.ExecSQL;
datamodule1.qryDB1.SQL.Text := 'UPDATE table SET Member_ExpireDate = :ExpireDate WHERE Member_ID = :MemberID';
datamodule1.qryDB1.ParamByName('ExpireDate').AsDate := IncYear(Today,1);
datamodule1.qryDB1.ParamByName('MemberID').AsInteger := SomeIDValue; // or whatever data type your field uses
datamodule1.qryDB1.ExecSQL;
Вам нужно вставить 'DateTime'? – Sami
Насколько вы старались выглядеть, прежде чем задавать этот вопрос? Google нашел это достаточно легко: http://stackoverflow.com/questions/27271448/inserting-current-date-and-time-into-access-database – MartynA