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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.10.2007, 17:05   #1
Nomad
Пользователь
 
Аватар для Nomad
 
Регистрация: 08.10.2007
Сообщений: 22
Вопрос SQL в Delphi

Сразу начну с того в чем суть моей проблемы: никак не получается сделать выборку данных из базы. Использую стандартный набор компонентов: DBGrid, Table, DataSource и Query. Связи между ними настроены и проверены, загвостка заключается в том что никак не получается запустить эту выборку! Мне надо, чтобы запрос формировался с добавлением параметра из компонента Edit... Пробовал писать в обработчике кнопки следующее:

Query1.SQL.Add('select NomerZhVD from Dispetcher where nomerZhVD=Edit1.Text');

и еще:


Query1.SQL.Add('select NomerZhVD from Dispetcher where nomerZhVD=' + chr(39) +Edit1.Text + chr(39) ); , компилятор выдает ошибки:

Query1: No SQL statment available и Insufficient memory for this operation. Alias: ZhUDPD_S'.

Может ошибка заключается в связях между компонентами или в тексте SQL-запроса, если кто знает в чем здесь дело, напишите...
Nomad вне форума Ответить с цитированием
Старый 08.10.2007, 17:18   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

текст SQL запроса можно проверить на частном случае, т.е. пишешь не Edit1.Text, а какое-либо значение вписываешь, т.е. пишешь:
Query1.SQL.Add('select NomerZhVD from Dispetcher where nomerZhVD="йа запрос"');
если работает, то меняешь на:
Query1.SQL.Add('select NomerZhVD from Dispetcher where nomerZhVD="'+Edit1.Text+'"');
хотя в данном случае лучше использовать параметры, т.е. пишешь:
Query1.SQL.Add('select NomerZhVD from Dispetcher where nomerZhVD=:nomer'); и у Query1.ParamByName('nomer').Value := Edit1.Text
pu4koff вне форума Ответить с цитированием
Старый 09.10.2007, 10:10   #3
Nomad
Пользователь
 
Аватар для Nomad
 
Регистрация: 08.10.2007
Сообщений: 22
Вопрос И еще один вопрос по SQL...

С частным случаем прокатило вроде, а можно еще сделать так, чтобы с одной базой данных были связаны по два DBgrid, DataSource и Table, но первая тройка служила просто для отображения данных, а вторая выводила результаты SQL-запроса?
Nomad вне форума Ответить с цитированием
Старый 09.10.2007, 10:55   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,091
По умолчанию

Цитата:
Сообщение от Nomad Посмотреть сообщение
С частным случаем прокатило вроде, а можно еще сделать так, чтобы с одной базой данных были связаны по два DBgrid, DataSource и Table, но первая тройка служила просто для отображения данных, а вторая выводила результаты SQL-запроса?
дык отображение данных и есть вывод результата запроса, но вапще можно хоть 10 штук с одной таблицей связать
pu4koff вне форума Ответить с цитированием
Старый 10.10.2007, 11:22   #5
Nomad
Пользователь
 
Аватар для Nomad
 
Регистрация: 08.10.2007
Сообщений: 22
Вопрос Отображение данных

Этоя тоже разрулил, мне надо было, чтобы у меня на форме располагались 2 DBGird, оба связанные с одной базой, но только первый из них должен просто отображать данные, а второй отображать те данные, которые я вытаскиваю с помощью SQL-запроса, ну это для наглядности... Что касается самих SQL-запросов, при их выполнении с частными значениями, все хорошо, но когда я питаюсь заменить частное значение записью типа "+Edit1.Text+", заспрос как бы выполняется, но данные во вотрой DBGrid не отображаются, хотя все необходимые названия полей высвечеваются... В чем тут дело?
Nomad вне форума Ответить с цитированием
Старый 10.10.2007, 12:25   #6
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
мне надо было, чтобы у меня на форме располагались 2 DBGird, оба связанные с одной базой, но только первый из них должен просто отображать данные, а второй отображать те данные, которые я вытаскиваю с помощью SQL-запроса, ну это для наглядности... Что касается самих SQL-запросов, при их выполнении с частными значениями, все хорошо, но когда я питаюсь заменить частное значение записью типа "+Edit1.Text+", заспрос как бы выполняется, но данные во вотрой DBGrid не отображаются, хотя все необходимые названия полей высвечеваются... В чем тут дело?
DBGrid1 - DataSource:=DataSource1;
DataSource1 - DataSet:=Table1;

DBGrid2 - DataSource:=DataSource2;
DataSource2 - DataSet:=Query1;

Query1.Open; !!! А не Query1.ExecSQL !!!
mihali4 вне форума Ответить с цитированием
Старый 11.10.2007, 10:55   #7
Nomad
Пользователь
 
Аватар для Nomad
 
Регистрация: 08.10.2007
Сообщений: 22
Хорошо Нашел решение...

Просто переписал часть SQL-запроса и убрал один ', теперь все работает!
Обработчик для кнопки и сам запрос выглядят теперь так:

Query1.Active:=False;
Query1.SQL.Clear;
Query1.SQL.Add('select * from Dispetcher where NomerZhVD=' + chr(39) + Edit1.Text + chr(39));
Query1.SQL.Text;
Query1.Active:=True;

Особое спасибо pu4koff!
Nomad вне форума Ответить с цитированием
Старый 17.10.2007, 11:18   #8
Nomad
Пользователь
 
Аватар для Nomad
 
Регистрация: 08.10.2007
Сообщений: 22
Вопрос Формирование отчетов в Delphi с помощью QuickRep

Добрался наконец-то до отчетных форм, проинсталировал Qreport, настроил связи между компонентами, связал с базой данных, вроде все нормально... Но дальше становится интересно, при предварительном просмотре отчета с помощью пункта Preview контекстного меню QuickRep'а, отчет выводится так как надо, но при попытке его сформировать в запущенной программе, выдается сообщение об ошибке:

Project Project1.exe raised exception class EAccessViolation with message 'Access violation at adress 004F72BC in module 'Project1.exe'. Read adress 00000304'. Process stopped.Use Step or Run to continue.

Правда это в том случае, если я пытаюсь использовать процедуру:

procedure TForm11.Create(Sender: TObject);
begin
Quickrep1.Preview;
end;

Какие есть еще варианты, того как сделать так, чтобы предварительный просмотр активировался автоматически?

Последний раз редактировалось Nomad; 17.10.2007 в 11:27.
Nomad вне форума Ответить с цитированием
Старый 23.10.2007, 10:52   #9
Nomad
Пользователь
 
Аватар для Nomad
 
Регистрация: 08.10.2007
Сообщений: 22
Хорошо

Разобрался и с этой проблемой ! Все никак не мог заставить срабатывать QuickRep1.Preview; , вместо желаемого результата получал пустое окно ... А сделал следующее: на форму с отчетом поместил компонент Timer, обозначил переменную, которая которая меняет свое значение от 0 до 2, при изменении значения выполняется определенное действие: при 1 - формируется отчет и на экране появляется окно для печати, при 2 - таймер перестает работать, после чего выводится сообщение о том, что отчет сформирован и распечатан, 0 - начальное значение переменной. Осталось теперь сделать так, чтобы на печать выводилась только текущая запись базы данных...
Nomad вне форума Ответить с цитированием
Старый 28.11.2007, 19:42   #10
Nomad
Пользователь
 
Аватар для Nomad
 
Регистрация: 08.10.2007
Сообщений: 22
Вопрос Продолжение следует...

Эх ... Выше описанная проблема больше не беспокоит , все оказалось просто , надо было лишь очистить свойство DataSet у компонента QuickRep, и все бы хорошо, только теперь никак не могу сделать импорт данных в MS Word ... Возможно это сделать с помощью QuickRep или стоит воспользоваться другими компонентами?

Последний раз редактировалось Nomad; 28.11.2007 в 19:46.
Nomad вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа-тест в Delphi) скиньте))а то програмку здавать преподу надо,и самой хочется понять Delphi Верчик Помощь студентам 9 02.03.2009 17:46
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54