Главная страница
    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.012 c
2-1133442719
DimLord
2005-12-01 16:11
2005.12.18
Сохранение БД Access в Delphi 7


4-1127981652
BaxTMaH
2005-09-29 12:14
2005.12.18
Русский язык


2-1133425225
File-Open
2005-12-01 11:20
2005.12.18
Как изменить путь к папке проектов, используемый по умолчанию?


2-1133285271
STRINGGRID
2005-11-29 20:27
2005.12.18
TABLICA STRINGGRID


3-1130924869
ZaW
2005-11-02 12:47
2005.12.18
Это что еще за ошибка такая?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский