Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Парамметрический SQL-запрос 
:(
    Опции темы
Dolphinchik
Дата 19.12.2006, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 47
Регистрация: 24.7.2006
Где: Филлипины

Репутация: нет
Всего: нет



Имеется переменная типа string, которая представляет собой названия таблиц через запятую, 
Нам необходимо эту переменную, как параметр, поместить в SQL-запрос после from.
Я сделала это следующим образом:

Код

  LIST(Sender);
  Query1.ParamByName('a').AsString:=Edit2.Text;
  Query1.ParamByName('b').AsString:=Edit3.Text;
  Query1.ParamByName('c').AsString:=Edit4.Text;
  Query1.SQL.Add('select * from '+strok_s);
  Query1.SQL.Add('where indfrom=:a');
  Query1.SQL.Add('and ser=:b');
  Query1.SQL.Add('and num=:c');
  Query1.ExecSQL;
  Query1.Active:=true;


Вылетает ошибка, что тип данных поля "a" неизвестен, все парамметры запроса прописанны..да и вообще "a" - не поле..Конец рабочего дня, не понимаю где я могла допустить ошибку, помогите разобраться smile


BDE, FoxPro.

PM MAIL MSN   Вверх
Savek
Дата 19.12.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



1. Значение параметрам присваивай ПОСЛЕ того как установлено  подключение к базе И присвоен текст запроса
2. Query1.ExecSQL; это лишнее, надо либо Open либо Active:=true

Это сообщение отредактировал(а) Savek - 19.12.2006, 09:03
PM MAIL   Вверх
Rodman
Дата 19.12.2006, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Код

  Query1.SQL.Add('select * from '+strok_s);
  Query1.SQL.Add('where indfrom=:a');
  Query1.SQL.Add('and ser=:b');
  Query1.SQL.Add('and num=:c');
  Query1.ParamByName('a').AsString:=Edit2.Text;
  Query1.ParamByName('b').AsString:=Edit3.Text;
  Query1.ParamByName('c').AsString:=Edit4.Text; 
  Query1.ExecSQL;

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Savek
Дата 19.12.2006, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Rodman,  ExecSQL не вернет ни одной строки smile 
PM MAIL   Вверх
Rodman
Дата 19.12.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Цитата(Savek @  19.12.2006,  13:30 Найти цитируемый пост)
Rodman,  ExecSQL не вернет ни одной строки   

согласен... пропустил...

Код

Query1.SQL.Add('select * from '+strok_s);
  Query1.SQL.Add('where indfrom=:a');
  Query1.SQL.Add('and ser=:b');
  Query1.SQL.Add('and num=:c');
  Query1.ParamByName('a').AsString:=Edit2.Text;
  Query1.ParamByName('b').AsString:=Edit3.Text;
  Query1.ParamByName('c').AsString:=Edit4.Text; 
  Query1.Open;

PM MAIL WWW Skype GTalk YIM MSN   Вверх
Rodman
Дата 19.12.2006, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Код

Query1.SQL.Add('select * from '+strok_s+' where indfrom='+Edit2.Text+' and ser='+Edit3.Text+' and num='+Edit4.Text+';'); 
  Query1.Open;


Это сообщение отредактировал(а) Rodman - 19.12.2006, 16:14
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Savek
Дата 19.12.2006, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



От нечего делать поправлю немного
Код

Query1.SQL.Add('select * from '+strok_s+' where indfrom='+QuotedStr(Edit2.Text)+' and ser='+QuotedStr(Edit3.Text)+' and num='+QuotedStr(Edit4.Text)+';'); 
Query1.Open;

Кстати где автор? Для кого мы здесь стараемся? smile 
PM MAIL   Вверх
Rodman
Дата 19.12.2006, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Savek, что это такое??? (QuotedStr) - никогда не юзал...

Но у меня и без этого работает...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Vas
Дата 19.12.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Rodman, QuotedStr заключает строку переданную параметром в эту функцию в одинарные кавычки, очень полезная функция. 
Цитата(Rodman @  19.12.2006,  17:01 Найти цитируемый пост)

Но у меня и без этого работает...

Да и будет работать если в Edit'ах числовые значения вводятся, а если строки то наврядли.


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Rodman
Дата 19.12.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Vas, cенкс...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Savek
Дата 20.12.2006, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 355
Регистрация: 10.4.2006
Где: Воронеж

Репутация: 7
Всего: 7



Сначала я подумал что у нее поля строковые, но сейчас, глядя названия не уверен...
В последней поправке могу быть и не прав smile 
PM MAIL   Вверх
Vas
Дата 20.12.2006, 09:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Из текста Dolphinchik:
Код

Query1.ParamByName('a').AsString

параметр передается как строка, значит поля вероятнее всего строковые.

Это сообщение отредактировал(а) Vas - 20.12.2006, 09:47


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Mephisto
Дата 20.12.2006, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Волкъ
***


Профиль
Группа: Завсегдатай
Сообщений: 1818
Регистрация: 27.8.2003
Где: Питер

Репутация: нет
Всего: 34



Цитата(Dolphinchik @  19.12.2006,  09:36 Найти цитируемый пост)
эту переменную, как параметр, поместить в SQL-запрос 

На сколько я знаю Delphi не разрешает помещать название таблиц как параметр. smile
PM   Вверх
Vas
Дата 20.12.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

Репутация: 23
Всего: 28



Цитата(Mephisto @  20.12.2006,  10:01 Найти цитируемый пост)
На сколько я знаю Delphi не разрешает помещать название таблиц как параметр.

Так нельзя:
Код

ADOQuery1.SQL.Add('select * from :table');
ADOQuery1.ParamByName('table').AsString:='t_dolg';

А так без проблем:
Код

Tab:='t_dolg';
ADOQuery1.SQL.Add('select * from '+Tab);

Что и делает автор  smile 

Это сообщение отредактировал(а) Vas - 20.12.2006, 11:46


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
Rodman
Дата 20.12.2006, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 22
Всего: 122



Mephisto, в данном случае это не параметр... строка запроса формируется и все...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0544 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.