-
Ок! Думал что наоборот лучше меньше. Однако на счет UPDATE я рано радовался. Как то "странно" он работает. Даю комманду UPDATE SpotTable SET Info="111" WHERE (DXCall=:DXCall) и все поля Info становятся пустыми, вместо 111.
-
> Строковое представление зависит от текущей локали
Так это я уже понял - в том то и дело - дату как параметр передаю! Вот в чем непонятка. Причем для всех 3-х полей типа даты - одна и таже проблема.
-
Параметры:
FSpotCommand := TADOCommand.Create(nil);
with FSpotCommand do
begin
Connection := FSpotConnection;
Parameters.Clear;
with Parameters.AddParameter do
begin
Name := 'DXCall';
DataType := ftString;
Direction := pdInput;
Size := 50;
end;
with Parameters.AddParameter do
begin
Name := 'DateSpot';
DataType := ftDate;
Direction := pdInput;
end;
with Parameters.AddParameter do
begin
Name := 'TimeSpot';
DataType := ftTime;
Direction := pdInput;
end;
with Parameters.AddParameter do
begin
Name := 'Freq';
DataType := ftFloat;
Direction := pdInput;
end;
with Parameters.AddParameter do
begin
Name := 'SpoterCall';
DataType := ftString;
Direction := pdInput;
Size := 20;
end;
with Parameters.AddParameter do
begin
Name := 'Info';
DataType := ftString;
Direction := pdInput;
Size := 100;
end;
with Parameters.AddParameter do
begin
Name := 'DateTimeOfGet';
DataType := ftDateTime;
Direction := pdInput;
end;
with Parameters.AddParameter do
begin
Name := 'IsNewCountry';
DataType := ftInteger;
Direction := pdInput;
end;
with Parameters.AddParameter do
begin
Name := 'IsNewSpot';
DataType := ftBoolean;
Direction := pdInput;
end;
with Parameters.AddParameter do
begin
Name := 'Country';
DataType := ftString;
Direction := pdInput;
Size := 10;
end;
with Parameters.AddParameter do
begin
Name := 'BandADIF';
DataType := ftString;
Direction := pdInput;
Size := 20;
end;
with Parameters.AddParameter do
begin
Name := 'Mode';
DataType := ftString;
Direction := pdInput;
Size := 20;
end;
with FSpotCommand.Parameters, FSpotCommand do
begin
CommandText := 'UPDATE SpotTable SET Info=:Info WHERE (DXCall=:DXCall) ' +
'AND (DateSpot=:DateSpot) AND (TimeSpot=:TimeSpot) ' +
' AND (Freq=:Freq) AND (SpoterCall=:SpoterCall)';
ParamByName('DXCall').Value := ClusterData.DXCall;
ParamByName('DateSpot').Value := Trunc(SpotDate);
ParamByName('TimeSpot').Value := Frac(SpotDate);
ParamByName('Freq').Value := ClusterData.Freq;
ParamByName('Info').Value := ClusterData.Info;
ParamByName('SpoterCall').Value := ClusterData.SpoterCall;
Execute(ChangeRecords, '');
end;
-
Убираем параметры даты/времени - все работает.... относительно работает... поле Info становится пустым.
-
> [62] Alex_C (17.11.11 15:28) > ParamByName('DateSpot').Value := Trunc(SpotDate); > ParamByName('TimeSpot').Value := Frac(SpotDate);
ParamByName('DateSpot').AsDateTime := StartOfTheDay(SpotDate); ParamByName('TimeSpot').AsDateTime := Frac(SpotDate);
И зачем ты оставил всё-таки два поля? Есть реальная необходимость?
Непонятно что там с Info.
-
> И зачем ты оставил всё-таки два поля? Есть реальная необходимость?
Есть некоторая, можно и одно сделать - это из прошлой программы осталось. Мне белее не понятно, почему с DateTime проблемы. > ParamByName('DateSpot').AsDateTime := StartOfTheDay(SpotDate);
Это
function StartOfTheDay(const AValue: TDateTime): TDateTime;
begin
Result := Trunc(AValue);
end;
-
ftDate - ftDateTime ftTime - ftDateTime
не все понимают "огрызки".
> почему с DateTime проблемы. с ним то как раз проблем нет, а у тебя что?
-
Так. Первую проблему нашел -
ParamByName('TimeSpot').AsDateTime := Frac(SpotDate);
Так нельзя. По ходу > не все понимают "огрызки".
Нельзя давать отдельно дату и отдельно время.
-
Нашел следующую проблему с UPDATE:
UPDATE SpotTable SET DateTimeSpot=:DateTimeSpot
В SET не получается использовать тип DateTime.
-
> В SET не получается использовать тип DateTime.
Сделал сейчас пробную отдельную программу - все работает.. Почему же у меня не работает
procedure UpdateSpot(var SpotCommand: TADOCommand;
DXCall: string; DateTimeSpot: TDateTime;
Freq: Double; SpoterCall, Info: string; DateTimeOfGet: TDateTime);
begin
with SpotCommand.Parameters, SpotCommand do
begin
ParamByName('DXCall').Value := DXCall;
ParamByName('DateTimeSpot').Value := DateTimeSpot;
ParamByName('Freq').Value := Freq;
ParamByName('SpoterCall').Value := SpoterCall;
ParamByName('Info').Value := Info;
ParamByName('DateTimeOfGet').Value := DateTimeOfGet;
Execute(ChangeRecords, '');
end;
end;
Вызываю
UpdateSpot(FUpdateSpotCommand, ClusterData.DXCall, SpotDate,
ClusterData.Freq, ClusterData.SpoterCall,
ClusterData.Info, Now);
Уже вместо MinSpotDate просто Now поставил... Все равно несоответствие типов. Сама CommandText
CommandText := 'UPDATE SpotTable SET DateTimeOfGet=:DateTimeOfGet ' +
'WHERE (DXCall=:DXCall) AND (DateTimeSpot=:DateTimeSpot) ' +
'AND (Freq=:Freq) AND (SpoterCall=:SpoterCall) AND (Info=:Info)';
-
> [69] Alex_C (17.11.11 16:56) > Почему же у меня не работает
Определение таблицы покажи. Реальное только.
-
> Alex_C (17.11.11 16:00) [65]
Не используй свойства AS
-
> Alex_C (17.11.2011 16:33:07) [67]
Можно
-
> Alex_C (17.11.2011 16:49:08) [68]
Чей тип DateTime?
-
> Alex_C (17.11.2011 16:56:09) [69]
Да брось ты эти базы, пойди пивка выпей
-
> :DateTimeSpot
Разве Акцесс такие имена понимает
-
> Можно
Я чего то окончательно запутался. Честно говоря не думал, что организовать работу более 100 радиостанций с разным интерфейсом через ком-порт без практически документации будет проще, чем со связкой SQL+ADO разобраться. ))) Причем на сколько я понимаю, проблема не в SQL, а именно в ADO.
> Не используй свойства AS
Так я его и не использую.
> Разве Акцесс такие имена понимает
Понимает.
> Определение таблицы покажи. Реальное только.
Саму таблицу я создал в эксесе - конструкторе таблиц. Смысла программно ее создавать пока не было, пока окончательно все проблемы не решу.
Большое спасибо за столь активную мне помощь - очень со многими весьма мало документированными вещами разобрался. Однако проблема по ходу не в неправильности SQL запросов как таковых, а в связке с ADO. Типичный пример - у меня было поле Band - так эксес его воспринемать не хочет, ругается. Хотя это не зарезервированное поле SQL. В общем пока пробую и так, и так - пытаюсь понять суть проблемы.
-
> [76] Alex_C (17.11.11 22:30) > Однако проблема по ходу не в неправильности SQL запросов > как таковых, а в связке с ADO.
Ты через ADO можешь ведь не только к Аксес, который не Аксес а Jet, обращаться, но и к другим серверам, Jet не сервер.
-
> [77] Inovet © (17.11.11 23:34) > но и к другим серверам
У них и SQL отличается, и может сильно отличаться.
-
А причину то я нашел - Execute(ChangeRecords, ''); - вот она! Нельзя Paramerts в "" устанавливать! Вообще вот по этому нет документации!
|