Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
4 / 4 / 1
Регистрация: 24.06.2013
Сообщений: 62
PostgreSQL

Запрос с параметром из Delphi в Postgres

11.02.2015, 14:30. Показов 3886. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
Поиск конкретно для связки Delphi + Postgres ничего не дал.

Есть БД (Postgres) есть приложение Delphi.

В редакторе запросов Postgres запрос выглядит так:
SQL
1
INSERT INTO "TestDivType" ("DT1", "DT2", "DT3") VALUES ('1111y','dfgdfgdfgdfgdf', TRUE)
Этот же запрос необходимо перенести в код Delphi.
Так работает:
Delphi
1
2
Self.Query1.SQL.Text:='INSERT INTO "TestDivType" ("DT1", "DT2", "DT3") VALUES (''1111y'',''dfgdfgdfgdfgdf'', True)';
Self.Query1.ExecSQL
При попытке сделать добавляемые значения параметрами:
Delphi
1
Self.Query1.SQL.Text:='INSERT INTO "TestDivType" ("DT1", "DT2", "DT3") VALUES (:par1, :par2, :par3)';
Вылетаем в ошибку "Аргументы имеют неверный тип..." (ещё до присвоения параметров и выполнения запроса)
Как я понял, ошибка возникает из-за одинарных кавычек, которые должны быть у добавляемых текстовых значений.
С другой стороны параметры вроде должны подставляться корректно...

Возможно кто-то сталкивался или знает другую возможную причину?

P.S. Вариант решения в виде переноса запроса в саму БД и отправка из приложения значений параметров не рассматривается.
К Postgres подключаемся с помощью ODBC драйвера.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.02.2015, 14:30
Ответы с готовыми решениями:

Postgres рекурсивный запрос?
В общем имею рекурсивный запрос WITH RECURSIVE temp1 ( p_id,p_parent,p_title,PATH, LEVEL, NAME ) AS ( SELECT...

Разбираюсь с aiohttp, запрос к postgres
Приветствую. Разбираюсь с aiohttp в связке postgres. Уровень - начинающий разработчик, ранее, для веб писал только пару приложений на...

Почему запрос postgres выдает на выходе массив?
Добрый день, Есть 3 связанных последовательно таблички: categories ( id, name) products ( id, category_id, name ) tarifs (id,...

11
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.02.2015, 14:42
Цитата Сообщение от Anton Kadnikov Посмотреть сообщение
ошибка возникает из-за одинарных кавычек, которые должны быть у добавляемых текстовых значений.
У значений, передаваемых через параметры, не должно быть лишних кавычек.
0
4 / 4 / 1
Регистрация: 24.06.2013
Сообщений: 62
11.02.2015, 14:45  [ТС]
Тогда совсем не понятно...
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.02.2015, 15:03
Код целиком покажи, где параметры задаются и т.п.
0
4 / 4 / 1
Регистрация: 24.06.2013
Сообщений: 62
11.02.2015, 15:10  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm3.Button1Click(Sender: TObject);
begin
Self.Query1.Close;
Self.Query1.SQL.Clear;
Self.Query1.SQL.Text:='INSERT INTO "TestDivType" ("DT1", "DT2", "DT3") VALUES (:par1, :par2, :par3)';
//Self.Query1.SQL.Text:='INSERT INTO "TestDivType" ("DT1", "DT2", "DT3") VALUES (''1112y'',''dfgdfgdfgdfgdf'', True)';
Self.Query1.Parameters.ParamByName('par1').Value:='1113y'; //Self.Edit1.Text;
Self.Query1.Parameters.ParamByName('par2').Value:='dfgdfgdfgdfgdf'; //Self.Memo1.Text;
Self.Query1.Parameters.ParamByName('par3').Value:=True;
Self.Query1.ExecSQL;
end;
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,611
11.02.2015, 15:14
А если так
Delphi
1
2
3
Query1.ParamByName('par1').AsString:='1113y'; //Self.Edit1.Text;
Query1.ParamByName('par2').AsString:='dfgdfgdfgdfgdf'; //Self.Memo1.Text;
Query1.ParamByName('par3').AsBoolean:=True;
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.02.2015, 15:17
Попробуй так:
Delphi
1
2
Query1.Parameters.ParamByName('par1').Value:='''1113y''';
Query1.Parameters.ParamByName('par2').Value:='''dfgdfgdfgdfgdf''';
0
4 / 4 / 1
Регистрация: 24.06.2013
Сообщений: 62
11.02.2015, 15:27  [ТС]
Пробовал, не помогает.
Ошибка остаётся даже если сделать так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
procedure TForm3.Button1Click(Sender: TObject);
begin
Self.Query1.Close;
Self.Query1.SQL.Clear;
Self.Query1.SQL.Text:='INSERT INTO "TestDivType" ("DT1", "DT2", "DT3") VALUES (:par1, :par2, :par3)';
//Self.Query1.SQL.Text:='INSERT INTO "TestDivType" ("DT1", "DT2", "DT3") VALUES (''1112y'',''dfgdfgdfgdfgdf'', True)';
//Self.Query1.Parameters.ParamByName('par1').Value:='1113y'; //Self.Edit1.Text;
//Self.Query1.Parameters.ParamByName('par2').Value:='dfgdfgdfgdfgdf'; //Self.Memo1.Text;
//Self.Query1.Parameters.ParamByName('par3').Value:=True;
//Self.Query1.ExecSQL;
end;
Но одно, "НО", кажется где-то натыкался на похожее, но решения там нет:
если запускать не из делфи, а сам exe'шник, то работает без ошибок.

Тем не менее хотелось понять...

Добавлено через 8 минут
Цитата Сообщение от FIL Посмотреть сообщение
Попробуй так:
Код Delphi
1
2
Query1.Parameters.ParamByName('par1').Va lue:='''1113y''';
Query1.Parameters.ParamByName('par2').Va lue:='''dfgdfgdfgdfgdf''';
и так пробовал...
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
11.02.2015, 16:27
Проверь, нет ли в Query1.Parameters лишних параметров, добавленных случайно вручную?

Добавлено через 39 секунд
Точнее, там вообще должно быть пусто.
0
4 / 4 / 1
Регистрация: 24.06.2013
Сообщений: 62
11.02.2015, 20:18  [ТС]
Цитата Сообщение от FIL Посмотреть сообщение
Проверь, нет ли в Query1.Parameters лишних параметров, добавленных случайно вручную?
Добавлено через 39 секунд
Точнее, там вообще должно быть пусто.
Нет, всё чисто.
Повторюсь, при запуске непосредственно exe'шника (не из Delphi) проблемы нет, запрос выполняется корректно.
Когда гуглил натыкался на нечто похожее, но решения там небыло.

Добавлено через 3 часа 47 минут
В общем, более менее удалось найти что:
1. Косяк не в запросе и не в параметрах.
2. На другом форуме по аналогичной проблеме (единственное, что не для Delphi, а для C++Builder), автор в итоге решил проблему так: "Решил проблему сменой Билдера на свежую версию! Установил RAD Studio Cbuilder XE2 - проект заработал без единой ошибки! видимо то был косяк билдера 2009!"

Вопрос: что можно сделать в моём случае? ибо запускать каждый раз непосредственно exe'шник не совсем удобно.
0
пофигист широкого профиля
4769 / 3204 / 862
Регистрация: 15.07.2013
Сообщений: 18,611
11.02.2015, 20:37
Цитата Сообщение от Anton Kadnikov Посмотреть сообщение
что можно сделать в моём случае?

Не по теме:

Может тоже установить RAD Studio Cbuilder XE2 ?

0
4 / 4 / 1
Регистрация: 24.06.2013
Сообщений: 62
12.02.2015, 15:02  [ТС]
P.S такой же запрос но для Access работает без ошибок.

Добавлено через 49 секунд
Цитата Сообщение от northener Посмотреть сообщение
Не по теме:
Может тоже установить RAD Studio Cbuilder XE2 ?
Нет, спасибо... Не так часто програмлю, предпочитаю Delphi..

Добавлено через 18 часов 16 минут
Уважаемые форумчане, проблему хотелось бы всё таки решить...
Метод научного тыка подсказывает, что проблема в распознавании текста запроса на стороне Delphi...
Если убрать двойные кавычки от имени таблицы и имён столбцов, то ругаться начинает уже не дельфи, а postgres.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.02.2015, 15:02
Помогаю со студенческими работами здесь

Golang postgres проверить если запрос не вернул записей
Есть такой код: func ModelLoginAuth(id, pwd string) (*MedReg) { //Cписок мед регистраторов rows := db.Select(`SELECT fam,...

Ls+odbc в postgres - один и тот же запрос выдает разные данные
Добрый день, коллеги! Есть некий скрипт, работает уже дцать лет, а тут внезапно стал работать нестабильно - на один и тот же SQL запрос...

Запрос с параметром
Здравствуйте! Могли бы вы помочь разобраться, как правильно сделать запрос с параметром. Сам запрос: select distinct FIO_rykovoditela,...

Запрос с параметром
Добрый вечер. Не могу придумать как реализовать такой запрос, да и вообще нужно-ли делать на уровне таблицы или формы? Есть 3 таблицы: ...

Запрос с параметром
Здравствуйте. Подскажите как сделать запрос с параметром- нужно выбрать из поля запись при вводе текста. Смысл-нужно просто найти...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru