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

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

SQL + функция Format [D6, PostgreSQL]


reticon ©   (2004-08-03 18:35:00) 

Есть запрос, отформатированный по разному с помощью ф-ции Format:

1. Query4.SQL.Add(Format('INSERT INTO iplan_tree VALUES (%d, 0, ''192.168.0.4'')', [4]));

2. Query4.SQL.Add(Format('INSERT INTO iplan_tree VALUES (%d, 0, %s)', [4, '192.168.0.104']));

Кто-нибудь может мне объяснить, почему первый Query4.SQL.Add выполняется нормально, без ошибок, а второй ну никак не хочет работать и выдает ошибку (SQL Error: ERROR: parser: parse error at or near ".0" at character 52)?

Не пойму я что-то, в чем проблема?


reticon   (2004-08-04 13:09:00) [1]

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


reticon   (2004-08-04 12:22:00) [2]

ну да, параметрический запрос, если это будет работать...


Соловьев   (2004-08-04 11:57:00) [3]


> А как сделать его ДИНАМИЧЕСКИМ?

т.е. парамметры? TQuery.Params+F1
или что ты имеешь ввиду под динамическим?


reticon   (2004-08-04 11:55:00) [4]

Это все понятно... но немного не то.

вот это:

ZQuery4.SQL.Add(Format('SELECT * FROM public.stats WHERE public.stats.resource_id = (SELECT resource_id FROM public.iplan_tree WHERE address = %s) and count = %d', ['''192.168.0.155''', 5977]));

работает, только что проверил.

А как сделать его ДИНАМИЧЕСКИМ?


Плохиш   (2004-08-04 10:52:00) [5]

>reticon ©   (03.08.04 18:35)

Количество апострофов ни на какие мысли не наводит?

QuotedStr


Соловьев   (2004-08-04 10:46:00) [6]


> date = %s', [ComboBox1.Text, DateTimePicker1.Date]));

или приводи типы. DateToStr(DateTimePicker1.Date)


Соловьев   (2004-08-04 10:36:00) [7]


> Query4.Close;
> Query4.SQL.Clear;
> Query4.SQL.Add(Format('SELECT * FROM stats WHERE stats.resource_id
> = (SELECT resource_id FROM iplan_tree WHERE address = %s)
> and date = %s', [ComboBox1.Text, DateTimePicker1.Date]));

используй параметры


reticon   (2004-08-04 10:35:00) [8]

делаю так:


...
addres := ComboBox1.Text;
date1 := DateTimePicker1.Date;
...
Query4.Close;
Query4.SQL.Clear;
Query4.SQL.Add(Format('SELECT * FROM stats WHERE stats.resource_id = (SELECT resource_id FROM iplan_tree WHERE address = %s) and date = %s', [ComboBox1.Text, DateTimePicker1.Date]));
...


та же фигня...


Johnmen   (2004-08-03 23:42:00) [9]

Так делается же макроподстановка строкового ЗНАЧЕНИЯ.
Надо

Query4.SQL.Add(Format('INSERT INTO iplan_tree VALUES (%d, 0, %s)', [4, '''192.168.0.104''']));

или

Query4.SQL.Add(Format('INSERT INTO iplan_tree VALUES (%d, 0, %s)', [4, '"192.168.0.104"']));


Наверх

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