Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
ВнизINSERT, поля суммы и даты Найти похожие ветки
← →
Yurij-7 (2005-11-28 18:45) [0]Уважаемые мастера, помогите разобраться в следующем,
есть кверик с которого берем данные и потом другим квериком эти данные заносим в таблицу, с символьными полями все понятно а вот с датой и суммой начались проблемы ... все это делаю так:
var
j : integer;
fio, address : string;
birthday : tdatetime;
temp:string;
begin
.....
begin
fio := Query1.FieldByName("fio").AsString;
address := Query1.FieldByName("address").AsString;
birthday := Query1.FieldByName("birthday").asdatetime;
Query3.DatabaseName := dbPath;
Query3.SQL.Clear;
temp:="insert into client (fio, address, birthday ) "+"values ( ""+fio+"" , ""+address+"" , "+ birthday+" )";
Query3.SQL.Add(temp);
Query3.ExecSQL;
но пишет о несоотвествии типов, помогите пжл разобраться.
← →
Lexer © (2005-11-28 19:03) [1]А если так?:
temp:="insert into client (fio, address, birthday ) "+"values ( ""+fio+"" , ""+address+"" , ""+ DateTimeToStr(birthday) +"" )";
Совет: если возможно, переделай на параметры.
← →
Yurij-7 (2005-11-28 19:14) [2]некатит (((((
вот чесно сказать сам интерисовался как делать инсерты с параметрами, но так ничего и ненашел , а примерчик небросите?
← →
Lexer © (2005-11-28 19:36) [3]Yurij-7 (28.11.05 19:14) [2]
>вот чесно сказать сам интерисовался как делать инсерты с параметрами, но так ничего и ненашел , а примерчик небросите?INSERT INTO CLIENT
(FIO, ADDRESS, BIRTHDAY)
VALUES
(:FIO, :ADDRESS, :BIRTHDAY)
← →
Desdechado © (2005-11-28 20:32) [4]так же, как и SELECT"ы
← →
Yurij-7 (2005-11-29 10:39) [5]а вот когда я перейду на параметры то получаеться ненужно както поособому выделять параметр текстовый или числовой ?
← →
Desdechado © (2005-11-29 10:55) [6]какой тип присвоишь, такой и будет
или, если не присвоишь тип, то будет определяться по типу значения параметра
а в конце будет приводиться к типу, который в БД
в твоих интересах не перемешивать их
а еще почитать справку, там все есть
← →
Yurij-7 (2005-11-29 11:35) [7]спасибо шас попробую разобраться
← →
evvcom © (2005-11-29 11:43) [8]
> Совет: если возможно, переделай на параметры.
Безо всяких возможно, а переделай и не передавай дату через стринги.
Какие компоненты доступа?
Возможно 2-ой кверик и вовсе не нужен, просто надо 1-ый сделать редактируемым, если он еще ReadOnly.
← →
Yurij-7 (2005-11-29 13:29) [9]делаю так:
Query1.SQL.Add("insert into primer (birthday) values ( :birthday )");
Query1.ParamByName("birthday").AsDateTime := date;
а ставит 30/12/1899 вместо текущей (((
может БДЕ глючит?
Спасибо
← →
Desdechado © (2005-11-29 13:42) [10]AsDate и AsDateTime - не одно и то же
← →
evvcom © (2005-11-29 13:57) [11]Поскольку используется BDE-компоненты, то можно делать так:
Query.UpdateObject := UpdateSQL; // настроенный объект TUpdateSQL
Query.CashedUpdates := True;
Query.Open;
...
Query.Edit;
Query.FieldByName("birthday").AsDate := date;
Query.Post;
и, например, в обработчиках QueryAfterPost и QueryAfterCancel сделать Query.ApplyUpdates и Query.CancelUpdates соответственно.
Плюсы:
1. Не надо переоткрывать запрос, чтобы увидеть сделанные изменения.
2. Можно редактировать прямо в гриде или при помощи стандартных DB-компонент.
3. Наверное, еще что-то есть...
← →
Yurij-7 (2005-11-29 13:57) [12]ставил AsDate - результат тотже (((
← →
Yurij-7 (2005-11-29 15:13) [13]evvcom © (29.11.05 13:57) [11]
я с вами согласен, но вопрос в date он почемуто не текущую дату ставит
← →
Yurij-7 (2005-11-29 16:23) [14]ну может подскажите хоть где это почитать можно??
← →
msguns © (2005-11-29 17:00) [15]
begin
Query3.DatabaseName := dbPath;
Query3.SQL.Clear;
Query3.SQL.Add("INSERT INTO client (fio, address, birthday) values (:f,:a,:b)");
Query3.PramByName("f").AsString := Query1.FieldByName("fio").AsString;
Query3.PramByName("a").AsString := Query1.FieldByName("address").AsString;
Query3.PramByName("f").AsDateTime := Query1.FieldByName("birthday").AsDateTime;
Query3.ExecSQL;
← →
Yurij-7 (2005-11-29 17:21) [16]Спасибо, так заработало, авот просто для себя несмог разобраться, как текущую дату записать в поле ТБД, ну например у меня получилось так:
Query1.SQL.Add("insert into primer (birthday) values ( :birthday )");
Query1.ParamByName ("birthday").Asdate := strtodate (edit2.Text);
Query1.ExecSQL;
а вот можно както без двойного преобразования даты в строку и обратно?
Спасибо.
← →
evvcom © (2005-11-30 08:52) [17]
> Yurij-7 (29.11.05 15:13) [13]
> evvcom © (29.11.05 13:57) [11]
> я с вами согласен, но вопрос в date он почемуто не текущую
> дату ставит
А ты правой кнопкой по своему Date и Find Declaration кликни. В SysUtils ли ты попадешь?
← →
Yurij-7 (2005-11-30 17:29) [18]разобрался, всем спасибо.
← →
Yurij-7 (2005-11-30 17:45) [19]А неподскажите можно ли параметрические запросы использовать с UPDATE ?
← →
Anatoly Podgoretsky © (2005-11-30 19:57) [20]Можно со всемм четырьмя видами запросов.
← →
Yurij-7 (2005-12-01 10:45) [21]Просто во многих книгах пишут о самых простых запросах, и мало уделяют времени для параметрических запросов ... а где об этом можно почитать поподробней? может есть статья?
яндекс уж очень много выдает ......
← →
msguns © (2005-12-01 12:14) [22]Пример "сложного" (связанного) апдэйта:
UPDATE FONDS1 INNER JOIN FONDSR ON (FONDSR.Letter=FONDS1.Letter) AND
(FONDSR.FondNumber=FONDS1.FondNumber) AND
(FONDSR.FondType=FONDS1.FondType) AND
(FONDSR.Category=FONDS1.Category) AND
SET FONDSR.AFID = FONDS1.FID, FONDSR.AArcID = FONDS1.ArcID,
FONDSR.ACountry = FONDS1.Country, FONDSR.ASDate = FONDS1.StartDate,
FONDSR.AEDate = FONDS1.EndDate, FONDSR.AFSize = FONDS1.FondSize,
FONDSR.AQDI = FONDS1.DontInvent, FONDSR.AQMF = FONDS1.MicroFished,
FONDSR.AQS = FONDS1.Secret, FONDSR.AAvl = FONDS1.Availability,
FONDSR.APassT = FONDS1.PassTo, FONDSR.APassL = FONDS1.PassLetter,
FONDSR.APassN = FONDS1.PassNumber, FONDSR.AJoinL = FONDS1.JoinLetter,
FONDSR.AJoinN = FONDS1.JoinNumber, FONDSR.AUtil = FONDS1.UtilDate,
FONDSR.ALossID = FONDS1.LossCauseID, FONDSR.ALossDt = FONDS1.LossDate,
FONDSR.ALossDc = FONDS1.LossDoc;
← →
msguns © (2005-12-01 12:20) [23]Прошу прощения, не в ту ветку пример.
В ответ на [21]Query3.DatabaseName := dbPath;
Query3.SQL.Clear;
Query3.SQL.Add("UPDATE client SET fio=:f, address=:a, birthday=:b "+
"WHERE ID=:id");
Query3.ParamByName("f").AsString := Edit1.Text;
Query3.ParamByName("a").AsString := Edit2.Text;
Query3.ParamByName("b").AsDateTime := DataTimePicker1.Date;
Query3.ParamByName("id").AsInteger := Query1.FieldByName("ID").AsInteger;
Query3.ExecSQL;
← →
Yurij-7 (2005-12-01 17:54) [24]msguns © (01.12.05 12:20) [23]
Спасибо огромное !
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2005.12.18;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.012 c