Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.01.2009, 15:56   #1
Demonk
Пользователь
 
Аватар для Demonk
 
Регистрация: 25.11.2008
Сообщений: 21
Печаль Обновление DBGrid + ADOQuery

Пытаюсь вывести данные из таблицы при помощи DBGrid и ADOQuery

когда в коде прописываю запрос: select [document No_], description, quantity from [ok$sales line] where [document No_]= '07-04074'

в ADOQuery, данные нормально выводятся в DBGrid, а если во время работы проги пытаюсь изменить запрос выводится сообщение:

Project Project1.exe raised exception class EOleException with message 'Invalid column name '07-04074". Process stopped. Use Step
or Run to continue.

привожу кусок кода конструирующего запрос :
no_:=InputBox('Поиск документа','Введите номер документа и нажмите OK.', '');
Zapros:='Select [document no_] from [ok$sales line] where [document no_]= "' + no_ + '"';

перелопатил инет и Help не могу понять где ошибка может тут кто подскажет?
Demonk вне форума Ответить с цитированием
Старый 12.01.2009, 16:50   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

В первую очередь избавьтесь от пробелов в именах полей и проблемы сразу резко пойдут на убыль.
mihali4 вне форума Ответить с цитированием
Старый 13.01.2009, 10:07   #3
masterdela
Пользователь
 
Аватар для masterdela
 
Регистрация: 28.01.2008
Сообщений: 66
По умолчанию

Может попробуешь через переменную:
Код:
select [document No_], description, quantity from [ok$sales line] where [document No_]= :number
Далее выполнение запроса:
Код:
no_:=InputBox('Поиск документа','Введите номер документа и нажмите OK.', '');

AdoQuery1.Active := false;
AdoQuery1.Parametrs.ParamByName('number').Value := no_;
AdoQuery1.Active := true;
Была бы цель - и всё получится!
masterdela вне форума Ответить с цитированием
Старый 13.01.2009, 15:02   #4
Demonk
Пользователь
 
Аватар для Demonk
 
Регистрация: 25.11.2008
Сообщений: 21
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
В первую очередь избавьтесь от пробелов в именах полей и проблемы сразу резко пойдут на убыль.
от пробелов избавиться не могу база не моя, я к ней только подключаюсь
Demonk вне форума Ответить с цитированием
Старый 13.01.2009, 15:08   #5
Demonk
Пользователь
 
Аватар для Demonk
 
Регистрация: 25.11.2008
Сообщений: 21
Смущение

Цитата:
Сообщение от masterdela Посмотреть сообщение
Может попробуешь через переменную:
Код:
select [document No_], description, quantity from [ok$sales line] where [document No_]= :number
[/CODE]
как и где его описать потому что после того как его использовал вот что выводит:

Project Project1.exe raised exception class EDatabaseError with message 'ADOQuery1: Parameter 'number' not found'. Process
stopped. Use Step or Run to continue.
Demonk вне форума Ответить с цитированием
Старый 13.01.2009, 19:49   #6
masterdela
Пользователь
 
Аватар для masterdela
 
Регистрация: 28.01.2008
Сообщений: 66
По умолчанию

Demonk, просто замени тот запрос что у тебя есть на тот что я писал с переменной, в свойствe SQL компонента AdoQuery1! В свойсте AdoQuery1 Parameters желательно задать тип этой переменной и значение по умолчанию...
Согласен с mihali4, не понимаю Demonk, как у тебя этот запрос работает! Названия таблиц с пробелами... Может я чего не знаю, надо попробывать как-нибудь ...
Была бы цель - и всё получится!
masterdela вне форума Ответить с цитированием
Старый 13.01.2009, 21:42   #7
_Engine_
Форумчанин
 
Регистрация: 29.06.2008
Сообщений: 603
По умолчанию

Запрос может и работать, если его запускать под Access, но под дельфой или любой другой средой желательно использовать параметрические запросы, особенно если они типовые и неоднократно повторяются при запросах к БД.
_Engine_ вне форума Ответить с цитированием
Старый 14.01.2009, 07:49   #8
Demonk
Пользователь
 
Аватар для Demonk
 
Регистрация: 25.11.2008
Сообщений: 21
Подмигивание

Цитата:
Сообщение от masterdela Посмотреть сообщение
Demonk, просто замени тот запрос что у тебя есть на тот что я писал с переменной, в свойствe SQL компонента AdoQuery1! В свойсте AdoQuery1 Parameters желательно задать тип этой переменной и значение по умолчанию...
Согласен с mihali4, не понимаю Demonk, как у тебя этот запрос работает! Названия таблиц с пробелами... Может я чего не знаю, надо попробывать как-нибудь ...
хорошо попробую заменить.

Нормально в sql работают запросы такие, и в delphi, и в access, просто нужно в квадратные скобки брать названия с пробелами, вот например этот запрос:

select [document No_], description, quantity from [ok$sales line] where [document No_]= '07-04074'

без проблем работает, как раз его и хочу заменить во время работы программы.
Demonk вне форума Ответить с цитированием
Старый 14.01.2009, 09:24   #9
Demonk
Пользователь
 
Аватар для Demonk
 
Регистрация: 25.11.2008
Сообщений: 21
Печаль

Цитата:
Сообщение от masterdela Посмотреть сообщение
Demonk, просто замени тот запрос что у тебя есть на тот что я писал с переменной, в свойствe SQL компонента AdoQuery1! В свойсте AdoQuery1 Parameters желательно задать тип этой переменной и значение по умолчанию...
заменил, не хочет работать , и я для проверки вывел на форму, поле мемо в нем вот что выводит :

Select [document no_] from [ok$sales line] where [document no_]= :number

а после ввода данных выводит :

БД нет записей, удовлетворяющих критерию запроса.

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

begin
if adoquery2.Active= false then
begin
adoquery2.Active:= true
end;

Zapros:='Select [document no_] from [ok$sales line] where [document no_]= :number';

no_:=InputBox('Поиск документа','Введите номер документа и нажмите OK.', '');

AdoQuery1.Active := false;
AdoQuery1.Parameters.ParamByName('n umber').Value:= no_;
AdoQuery1.Active := true;

if no_ <> '' then // пользователь ввел данные
begin
with form1.ADOQuery1 do
begin
Close; // закрыть файл-результат выполнения предыдущего запроса
SQL.Clear; // удалить текст предыдущего запроса
SQL.Add(Zapros);
memo1.Lines.add (Zapros);
Open; // активизируем выполнение запроса
end;
if form1.ADOQuery1.RecordCount <> 0 then
begin
form1.DataSource2.DataSet:=form1.AD OQuery1; // отобразить рез-т выполнения запроса
end else
begin
ShowMessage('В БД нет записей, удовлетворяющих критерию запроса.');
form1.DataSource2.DataSet:=form1.AD OTable1;
end;
end;
end;
Demonk вне форума Ответить с цитированием
Старый 14.01.2009, 10:45   #10
serqei35
Заблокирован
 
Регистрация: 05.12.2008
Сообщений: 6
По умолчанию

Привет! Если нужна книга по созданию баз данных в Delphi, то бесплатно скачать её можно здесь : http://golden-books.narod.ru/books/bd1.html
serqei35 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AdoQuery Stanislav БД в Delphi 34 26.06.2009 22:09
ADOQuery Только_Учусь Помощь студентам 2 16.07.2008 00:31
ADOQuery Roof БД в Delphi 2 12.07.2008 18:08
Запрос в ADOQuery Jon_1981 БД в Delphi 3 15.06.2007 10:41
adoquery Toxa БД в Delphi 10 12.02.2007 20:07