Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

INSERT, поля суммы и даты [D6, dBase, FoxPro, Paradox]


Страницы:   1 2

Yurij-7 ©   (2005-11-28 18:45:00) 

Уважаемые мастера, помогите разобраться в следующем,
есть кверик с которого берем данные и потом другим квериком эти данные заносим в таблицу, с символьными полями все понятно а вот с датой и суммой начались проблемы ... все это делаю так:
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;
но пишет о несоотвествии типов, помогите пжл разобраться.


Yurij-7   (2005-12-01 17:54:00) [1]

msguns ©   (01.12.05 12:20) [23]
Спасибо огромное !


msguns   (2005-12-01 12:20:00) [2]

Прошу прощения, не в ту ветку пример.

В ответ на [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;


msguns   (2005-12-01 12:14:00) [3]

Пример "сложного" (связанного) апдэйта:

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;


Yurij-7   (2005-12-01 10:45:00) [4]

Просто во многих книгах пишут о самых простых запросах, и мало уделяют времени для параметрических запросов ... а где об этом можно почитать поподробней? может есть статья?
яндекс уж очень много выдает ......


Anatoly Podgoretsky   (2005-11-30 19:57:00) [5]

Можно со всемм четырьмя видами запросов.


Yurij-7   (2005-11-30 17:45:00) [6]

А неподскажите можно ли параметрические запросы использовать с UPDATE ?


Yurij-7   (2005-11-30 17:29:00) [7]

разобрался, всем спасибо.


evvcom   (2005-11-30 08:52:00) [8]


> Yurij-7   (29.11.05 15:13) [13]
> evvcom ©   (29.11.05 13:57) [11]
> я с вами согласен, но вопрос в date он почемуто не текущую
> дату ставит

А ты правой кнопкой по своему Date и Find Declaration кликни. В SysUtils ли ты попадешь?


Yurij-7   (2005-11-29 17:21:00) [9]

Спасибо, так заработало,  авот просто для себя несмог разобраться, как текущую дату записать в поле ТБД, ну например у меня получилось так:

Query1.SQL.Add('insert into primer (birthday) values ( :birthday )');
Query1.ParamByName ('birthday').Asdate  := strtodate (edit2.Text);
Query1.ExecSQL;

а вот можно  както без двойного преобразования даты в строку и обратно?
Спасибо.


msguns   (2005-11-29 17:00:00) [10]

 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 16:23:00) [11]

ну может подскажите хоть где это почитать можно??


Yurij-7   (2005-11-29 15:13:00) [12]

evvcom ©   (29.11.05 13:57) [11]
я с вами согласен, но вопрос в date он почемуто не текущую дату ставит


Yurij-7   (2005-11-29 13:57:00) [13]

ставил AsDate  - результат тотже (((


evvcom   (2005-11-29 13:57:00) [14]

Поскольку используется 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. Наверное, еще что-то есть...


Desdechado   (2005-11-29 13:42:00) [15]

AsDate и AsDateTime - не одно и то же


Yurij-7   (2005-11-29 13:29:00) [16]

делаю так:

Query1.SQL.Add('insert into primer (birthday) values ( :birthday )');
Query1.ParamByName('birthday').AsDateTime := date;

а ставит 30/12/1899 вместо текущей (((

может  БДЕ глючит?

Спасибо


evvcom   (2005-11-29 11:43:00) [17]


> Совет: если возможно, переделай на параметры.

Безо всяких возможно, а переделай и не передавай дату через стринги.
Какие компоненты доступа?
Возможно 2-ой кверик и вовсе не нужен, просто надо 1-ый сделать редактируемым, если он еще ReadOnly.


Yurij-7   (2005-11-29 11:35:00) [18]

спасибо шас попробую разобраться


Desdechado   (2005-11-29 10:55:00) [19]

какой тип присвоишь, такой и будет
или, если не присвоишь тип, то будет определяться по типу значения параметра
а в конце будет приводиться к типу, который в БД
в твоих интересах не перемешивать их

а еще почитать справку, там все есть


Yurij-7   (2005-11-29 10:39:00) [20]

а вот когда я перейду на параметры то получаеться ненужно както поособому выделять параметр текстовый или числовой ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо