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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.12.2009, 07:29   #1
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию Создание запроса в БД

Доброго времени суток. Хочу узнать как надо составить запрос в технологии ADO и в BDE по возможности? База данных уже есть. Но никак не пойму как нужно правильно оформить свойства и события. С самим sql языком знаком. Но вот само оформление в среде никак не достану мозгами. Спасибо!
Всё гениальное - просто!
.Phoenix вне форума Ответить с цитированием
Старый 02.12.2009, 07:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Мда... Надо открывать курсы телепатов с такими вопросами...
Сам то понял что спросил?
Технология ADO не обязательно представляет компоненты. Есть и бескомпонентные варианты доступа к БД.
В твоем случае видимо имеется ввиду настройка Делфовых компонент.
Для АДО это если брать по минимуму, кидаешь на форму TADOQuery
В его ConnectionString кликаешь ( в инспекторе всмысле) по кнопке, настраивая доступ (Указываешь провайдер, машину или файл подключения).
А далее пишешь в свойство SQL.Text текст запроса и если он что-то возвращает вызываешь заклинание Оpen. Если запрос просто выполняет без возвращения набора то ExecSQL;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.12.2009, 15:27   #3
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Извиняюсь, что не до конца объяснил что мне нужно получить.
Цитата:
В его ConnectionString кликаешь ( в инспекторе всмысле) по кнопке, настраивая доступ (Указываешь провайдер, машину или файл подключения).
А далее пишешь в свойство SQL.Text текст запроса и если он что-то возвращает вызываешь заклинание Оpen. Если запрос просто выполняет без возвращения набора то ExecSQL;
Это всё я уже прочитал. Но у меня выходит ошибка, когда я пытаюсь сделать всё по науке. Мне интересно знать, стоит ли создавать результативную таблицу(ещё одну), на случай если я хочу получить результат с некоего запроса?

Помогите кто чем может, я кинул на форму ADOQuery компонент, в св-ве SQL написал запрос, как мне теперь получить результат?
Вот собственно сам запрос, решил начать с лёгкого:
Код:
Select *
From [Table];
Всё гениальное - просто!

Последний раз редактировалось Stilet; 04.12.2009 в 16:57.
.Phoenix вне форума Ответить с цитированием
Старый 03.12.2009, 23:10   #4
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию

DataSource2.DataSet:=Query1;
DBGrid2.DataSource:=DataSource2;
В этом примере я использовал компонент квери, если честно незнаю насколько он эдентичен Адо квери, но чтобы вывести запрос я поступил следующим образом. Кинул ещё один датасурс и добавил табличку. Запрос идёт в компонент квери 1, результат запроса переходит в датасурс2(т.к в датасурс 1 находится сама база, не хотел убирать её с экрана), а из датасурс выводится в другую таблицу.
Если всё откладывать на потом, то потом будет всё.
Herly вне форума Ответить с цитированием
Старый 04.12.2009, 14:10   #5
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Спс за совет, сработало. А какой мне оператор надо использовать в запросе, если я хочу взять отдельные определённые поля? Я пробовал через " (кавычки), как привык в Access, но мне выдаётся ошибка.
Всё гениальное - просто!
.Phoenix вне форума Ответить с цитированием
Старый 04.12.2009, 14:30   #6
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

ADO - для бд без пароля. Вобщем, читай, рассказываю основы работы кратенько
1) Создаешь бд Access. И кидаешь эту бд в папку, где будешь писать программу. Называешь ее bd_my.mdb
2) Кидаешь на форму ADOConnection. Выбираешь в инспекторе объектов свойство ConnectionString и нажимаешь на три точки.
2.1) Появилось окошко. Должно быть выбрано: Use Connection String - Нажимаешь Build
2.2) Появляется список - Выбираешь Microsoft.Jet.OLEDB.4.0 и нажимаешь далее.
2.3) Теперь указываешь путь к бд - нажимаешь три точки и в обзоре находишь свою бд.
2.4) Нажимаешь Проверить подключение. Должно быть ОК.
2.5) Нажимаешь во всех окшках ОК. У меня получилось три раза нажимать нужно ОК.
2.6) Теперь у тебя в свойстве ConnectionString получилась длинная строка. Скопируй ее полностью. Создай обработчик OnCreate для формы, где мы изменим немного нашу строку подключения.
Код:
//ADOC - это ADOConnection1 - просто переименовал Name 
procedure TForm1.FormCreate(Sender: TObject);
begin
  ADOC.ConnectionString:= 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source= bd_my.mdb;Persist Security Info=False';
 ADOC.Connected:= true;//подключение делаем активным
end;
После этого удали в инспекторе в свойствеConnectionString всю строку. У нас Она будет прописываться при OnCreate для формы.
И измени свойство LoginPrompt на false
Что изменили в строке подключения? Да просто удалили длинный путь к бд - оставили путь, который отсчитывается от местоположения самой программы. Это удобно для переносимости приложения с бд.

3) Кидай на форму компонент ADOQuery. Назовем его ADOQ1. Через инспектор объектов в свойстве Connection выбираешь наш ADOC.

3.1) Кидаешь на форму кнопку. Создаешь к ней обработчик события OnClick:
Код:
//создаем таличку
procedure TForm1.Button1Click(Sender: TObject);
begin
 ADOQ1.Active:= false;
 ADOQ1.SQL.Clear;
 ADOQ1.SQL.Add('CREATE TABLE TA_1 (ID_Q INT NOT NULL PRIMARY KEY , QUESTIONS MEMO NOT NULL);');
 ADOQ1.ExecSQL;
end;
Что сделали - создали таблицу с именем TA_1 с двумя полями: ID_Q (ему присвоили тип integer - INT и сказали, что NOT NULL и сделали его ключевым) и QUESTIONS (а этому присвоили тип MEMO - сюда кучу текста можно прописать будет да еще и сказали, что он тоже NOT NULL)

3.2) Таблица создана. Теперь ее заполним. Кидаешь на форму Edit, Memo и Button еще одну.
3.3.) Создаем обработчик OnClick для нашей новой кнопки.
Код:
//добавляем записи
procedure TForm1.Button2Click(Sender: TObject);
begin
 ADOQ1.Active:= false;
 ADOQ1.SQL.Clear;
 ADOQ1.SQL.Add('INSERT INTO TA_1 VALUES(' + Edit1.Text + ', "' +Memo1.Text + '")');
 ADOQ1.ExecSQL;
end;
Из Edit1 - берем номер для нашего ID_Q (Номер вопроса), а из Memo1 берем текст для нашего поля QUESTIONS (текст вопроса). Обрати внимание - ID_Q - ключевое поле и не должно быть повторений значения поля в пределах данной таблицы!

Можешь открыть Access и проверить таблички - должны быть данные внесены.

3.4) Теперь отобразим данные из таблицы. Кидаешь на форму еще Memo, Button и Edit. В Edit2 будем вводить номер вопроса, текст которого хотим отобразить. В Memo2 - сам текст вопроса будем отображать.
3.5) Создаем обработчик OnClick для нашей новой кнопки. :
Код:
//отображаем записи
procedure TForm1.Button3Click(Sender: TObject);
var
i: integer;
begin
 ADOQ1.Active:= false;
 ADOQ1.SQL.Clear;
 ADOQ1.SQL.Add('SELECT QUESTIONS FROM TA_1 WHERE ID_Q= ' + Edit2.Text + ';');
 ADOQ1.Active:= True;  //обрати внимание для SELECT - не ExecSQL, а именно Active!

 //если есть записи, удовлетворяющие нашему условиями
 if ADOQ1.RecordCount > 0 then begin
   Memo2.Clear;
   Memo2.Lines.Add(ADOQ1.FieldByName('QUESTIONS').AsString);
 end;

end;
Это мы отобразили в Memo2. А можно отображать в компонентах, которые предназначены для работы с наборами данных. Например, DBMemo. Попробуем.
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Старый 04.12.2009, 14:31   #7
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

3.5) Кидаешь на форму DBMemo (панель DataControls) и DataSource (панель DataAccess).
3.6) У DataSource есть свойство инспекторе - DataSet - в этом свойстве выбираешь наш ADOQ. У DBMemo есть свойство в инспекторе DataSource - выбираешь в нем наш DataSource.
Теперь немного дополним обработчик события для нашей последней кнопки:
Код:
//отображаем записи
procedure TForm1.Button3Click(Sender: TObject);
var
i: integer;
begin
 ADOQ1.Active:= false;
 ADOQ1.SQL.Clear;
 ADOQ1.SQL.Add('SELECT QUESTIONS FROM TA_1 WHERE ID_Q= ' + Edit2.Text + ';');
 ADOQ1.Active:= True;  //обрати внимание для SELECT - не ExecSQL, а именно Active!

 //если есть записи, удовлетворяющие нашему условиями
 if ADOQ1.RecordCount > 0 then begin
   Memo2.Clear;
   Memo2.Lines.Add(ADOQ1.FieldByName('QUESTIONS').AsString);
 end;

 DBMemo1.DataField:=  'QUESTIONS';//для отображения в DBMemo

end;
Выкладываю исходный проект. Как пользоваться?
а) Создать табличку кнопкой.
б) Добавить несколько записей - причем число в Edit1 должно быть при каждом добавлении разным - так как добавляем-то в ключевое поле.
в) Ввести в Edit2 номер вопроса и нажать Button3 - отобразить запись с ID_Q = номеру в нашем Edit2
Все.

Надеюсь, что прояснил ситуацию. Будут вопросы - спрашивай. Это только краткие основы работы с ADO из Делфи.
Вложения
Тип файла: rar Basic_work_ADO_part1.rar (12.5 Кб, 46 просмотров)
Изо всей благодати
В руках крепко сжатых
Я донесу только капли

Последний раз редактировалось Roof; 04.12.2009 в 14:52.
Roof вне форума Ответить с цитированием
Старый 04.12.2009, 16:10   #8
.Phoenix
Форумчанин
 
Регистрация: 02.04.2009
Сообщений: 235
По умолчанию

Спасибо за ответ. То, что хотел - получил.
Всё гениальное - просто!
.Phoenix вне форума Ответить с цитированием
Старый 04.12.2009, 16:12   #9
Roof
Форумчанин
 
Аватар для Roof
 
Регистрация: 01.02.2007
Сообщений: 785
По умолчанию

Наздоровье
Изо всей благодати
В руках крепко сжатых
Я донесу только капли
Roof вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание Веб-запроса АлёнаP Microsoft Office Excel 4 26.11.2010 17:47
Создание Запроса, (Объединение) chugo Microsoft Office Access 4 13.11.2009 21:12
Создание Сложного запроса chugo Microsoft Office Access 3 13.11.2009 15:28
Создание запроса gfadssa11 Microsoft Office Access 0 06.11.2009 23:00
Создание запроса PR0Z0N Microsoft Office Access 2 25.10.2009 16:11