Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.024 c
6-1125722250
sunsay
2005-09-03 08:37
2005.12.18
Ограничить кол-во входящих соединений


4-1129552219
ПЛОВ
2005-10-17 16:30
2005.12.18
Скорости, напряжения, температуры


2-1133694436
dikiy
2005-12-04 14:07
2005.12.18
hook


2-1132831664
Officeman
2005-11-24 14:27
2005.12.18
Про Слои - компонентов на форме


10-1109587824
fm
2005-02-28 13:50
2005.12.18
как сделать, чтобы COM сервер возвращал объект





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский