Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 402

/ вопрос закрыт /

Здравствуйте!
Пытаюсь сделать фильтрацию в данных.
Есть 2 таблицы: Trade Network (ID-supplier/ Supplier_name/ Product_category) и Supplier
Они связаны между собой и выводятся в делфи из access в общем, с ними всё замечательно.

Есть также ещё Edit, в который будет написана фамилия, которую нужно найти; Button, при нажатии на который будет работать фильтр и найденное отражаться в DBGrid.

Что бы было понятнее в приложении описан ход действий

Проблема заключается в том, что в Query1, свойство Active не меняется на true и выводится сообщение, что таблица не существует.
При запуске, когда ввожу имя и нажимаю на кнопку, выскакивает ошибка, что таблицы не существует

Подскажите, что исправить/подправить/добавить, что бы фильтр наконец таки заработал

Приложение:
  1.  
  2. Query1
  3.  
  4. SELECT ID-supplier, Supplier_name, Product_category
  5. FROM "BD.db" Trade Network
  6. WHERE (Supplier_name = :Name_param)
  7. Active => true
  8. DataSource1
  9. DataSet => Query1
  10. DBGrid1
  11. DataSource => DataSource1
  12.  
  13.  
  14.  
  15. DataType => ftString.
  16. ParamType => ptInput.
  17.  
  18.  
  19.  
  20. procedure TForm1.Button1Click(Sender: TObject);
  21. begin
  22. Query1.Close;
  23. if not Query1.Prepared then
  24. Query1.Prepare;
  25. Query1.ParamByName('Name_param').Value := Edit1.Text;
  26. Query1.Open;
  27. end;
  28.  


Haenta Вопрос закрыт (ответы не принимаются, мини-форум закрыт)

Вопрос задала: Haenta (статус: Посетитель)
Вопрос отправлен: 12 июня 2011, 18:29
Состояние вопроса: закрыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 9; последнее сообщение — 13 июня 2011, 12:31; участников в обсуждении: 3.
bugmenot

bugmenot (статус: 3-ий класс), 12 июня 2011, 20:00 [#1]:

Цитата (Haenta):

FROM "BD.db" Trade Network

чо-чо? точно access? и синтаксис SQL вызывает сомнения
виконання програми розпочинається з того самого мiсця, де призупинилося.

Haenta

Haenta (статус: Посетитель), 12 июня 2011, 21:01 [#2]:

то, что 2 таблицы из access - точно - и работают они как надо))

синтаксис SQl у меня тоже вызывает сомнение, т.к. на парах нам про него поверхностно только рассказывали и пришлось изучать его самостоятельно, скорее всего я что-то не так поняла
сейчас расшифрую SQL-запрос, как я его поняла

SELECT ID-supplier, Supplier_name, Product_category {названия столбцов в таблице, которую будем фильтровать}
FROM "BD.db" {название файла access} Trade Network {название таблицы в access}
WHERE (Supplier_name = :Name_param) {поле по которому будем фильтровать}

объясните, пожалуйста, ошибки
А кофе на клавиатуру тоже вирус пролил?
alexlafa

alexlafa (статус: Посетитель), 12 июня 2011, 21:47 [#3]:

FROM ':BD.db:Trade Network' - Я не эксперт, попробуйте так!?))
Haenta

Haenta (статус: Посетитель), 12 июня 2011, 21:53 [#4]:

alexlafa:
> FROM ':BD.db:Trade Network' - Я не эксперт, попробуйте так!?))

Всё равно не получается((
А кофе на клавиатуру тоже вирус пролил?
bugmenot

bugmenot (статус: 3-ий класс), 12 июня 2011, 22:13 [#5]:

навскидку, без лазанья в описание Accessовского диалекта:

Цитата (Haenta):

SELECT ID-supplier, Supplier_name, Product_category {названия столбцов в таблице, которую будем фильтровать}

ID-supplier является вычисляемым выражением, да-да, ID минус supplier. Надо либо переименовать столбец, либо справиться в документации, как их в аксессе принято окавычивать.

Цитата (Haenta):

FROM "BD.db" {название файла access} Trade Network {название таблицы в access}

расширение '.db' намекает на Paradox, у которого, кстати, такой вмещает ровно 1 таблицу, а у Access по соглашению - '.mdb'. Но это не главное, далее предложение FROM указывает на таблицу 'Trade' и определяет её псевдоним, как 'Network'. Опять такая же рекомендация, либо именовать объекты БД с учётом синтаксиса SQL, либо окавычивать.

В предложении WHERE скобки в этом случае можно опустить.

Цитата (Haenta):

пришлось изучать его самостоятельно

Если что, есть старая, но хорошая книга авторства Мартина Грубера.
виконання програми розпочинається з того самого мiсця, де призупинилося.

Haenta

Haenta (статус: Посетитель), 12 июня 2011, 22:28 [#6]:

bugmenot:
>ID-supplier является вычисляемым выражением, да-да, ID минус supplier. Надо либо переименовать столбец, либо справиться в документации, как их в аксессе принято окавычивать.

Точно =-))) Как-то об этом не подумала((
Вот так не проходит(( хотя на сайте было написано, что можно:
SELECT ID\-supplier, Supplier_name, Product_category {названия столбцов в таблице, которую будем фильтровать}
имена полей пробовала заключать в обратные кавычки - ` - но тоже не получилось(

bugmenot:
>расширение '.db' намекает на Paradox, у которого, кстати, такой вмещает ровно 1 таблицу, а у Access по соглашению - '.mdb'. Но это не главное, далее предложение FROM указывает на таблицу 'Trade' и определяет её псевдоним, как 'Network'. Опять такая же рекомендация, либо именовать объекты БД с учётом синтаксиса SQL, либо окавычивать.

Я так понимаю расширение .db можно оставить?
Trade Network - это уже исправлено на Warehouse

bugmenot:
>Если что, есть старая, но хорошая книга авторства Мартина Грубера.

Спасибо учту на будущее, только на данный момент время уже поджимает(
А кофе на клавиатуру тоже вирус пролил?
bugmenot

bugmenot (статус: 3-ий класс), 12 июня 2011, 22:52 [#7]:

Цитата (Haenta):

А вот так можно записать будет:
SELECT /ID-supplier

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

Цитата (Haenta):

расширение .db можно оставить?

можно и оставить
виконання програми розпочинається з того самого мiсця, де призупинилося.

Haenta

Haenta (статус: Посетитель), 12 июня 2011, 22:56 [#8]:

С кавычками я разобралась
Но он всё равно ругается, что не может найти файл
Может мне прикрепить свою бд, а вы посмотрите, что я там намудрила?
А кофе на клавиатуру тоже вирус пролил?
Haenta

Haenta (статус: Посетитель), 13 июня 2011, 12:31 [#9]:

SELECT *
FROM Warehouse
WHERE (Supplier_name = :Name_param);

Сделала такой запрос - всё работает =-)

Теперь хочу, чтобы в этой же таблице показывались данные из второй таблицы.
Для этого использовала подзапрос:

SELECT Name_goods, Price, Number_goods
FROM Supplier
WHERE ID_supplie IN
( SELECT ID_supplier
FROM Warehouse
WHERE (Supplier_name = :Name_param) );

Но когда Active меняю на true, пишет, что не хватает значения для одного или нескольких параметров.
Подскажите, пожалуйста, каких значений и для каких параметров может не хватать?
А кофе на клавиатуру тоже вирус пролил?

16 июня 2011, 22:27: Вопрос закрыт (решение принял автор вопроса — Haenta): Вопрос больше не актуален.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 16:45
Выполнено за 0.02 сек.