Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.08.2008, 19:02
Аватар для artemavd
artemavd artemavd вне форума
Начинающий
 
Регистрация: 05.08.2008
Сообщения: 115
Репутация: 12
По умолчанию Осваиваю SQL запросы

Осваиваю SQL запросы). Помогите мне записать пожалуйста SQL-запрос. У меня есть БД, в которой хранитится мобильный номер какого-то человека, его фамилия и имя, которая называется nomera.db. Мне надо, чтобы по моему запросу выводилась фамилия, имя и мобильный номер нужного мне человека. Как мне правильно организовать работу компонента Query, чтобы он работал? Что мне надо прописать в его свойстве SQL strings? Напишите пожалуйста код, чтобы я понял как правильно составлять запросы) Заранее благодарю))
Ответить с цитированием
  #2  
Старый 01.09.2008, 11:55
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Во-первых, нужно привести пример своей логики (напр.: известны фамилия и имя, найти телефон; или известен телефон, найти фамилию и имя).
Во-вторых, куда выводить: в отдельные поля (часть данных уже известна и её можно не искать) или в таблицу? Что делать если ответ не единственный?
Вообще, лучше дать определение таблицы (какие поля, есть ли Primary Key).
Нужно ли использовать параметры?
Ответить с цитированием
  #3  
Старый 01.09.2008, 14:01
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,105
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

В общем случае:

SELECT * FROM nomera

далее, в зависимости от задачи к этому запросу добавляются модификаторы:
[LEFT|RIGHT|INNER] JOIN ON - соединение таблиц
WHERE - условия фильтрации
ORDER BY [ASC|DESC] - сортировка
GROU BY - группировка
остальные, типа HAVING, используются реже.

Если нужны не все поля таблицы (таблиц), то вместо '*' можно просто их перечислить через запятую.

А вообще в интернете есть вполне приличные учебники по SQL для новичков.

По поводу использования в Delphi.
Как ты введешь запрос в соотв. свойстве SQL никого, кроме тебя, не волнует. Главное, что бы он был синтаксически правильным, а как ты будешь бить его на строки все равно. TQuery работает абсолютно так же, как TTable за исключением того, что для все операций используются соотв. запросы, которые надо указать самому.
Ответить с цитированием
  #4  
Старый 01.09.2008, 15:02
Аватар для artemavd
artemavd artemavd вне форума
Начинающий
 
Регистрация: 05.08.2008
Сообщения: 115
Репутация: 12
По умолчанию

AlexSKu, задача логики простая). Нужно зная фамилию (или имя) человека найти в БД его номер телефона. Выводить можно либо в Label, либо в DBEdit, либо в StringGrid, либо показывать просто messagebox с номером телефона. Как угодно. Поля в таблице следующие: Фамилия, Имя, Мобильный телефон. Первичного ключа нет. Imikle, а можно пожалуйста к моей задаче применительно написать? Задача: есть фамилия и имя, нужно узнать мобильный номер человека. И если можно, то напишите плиз куда прописывать: в свойство TStrings компонента Query или в процедуру кнопки?)
Ответить с цитированием
  #5  
Старый 01.09.2008, 15:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,105
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

прописывать в свойство SQL

Сведем задачу к такой:
Пользователь вводит строку, которая является именем или фамилией. Тогда в SQL надо прописать такую строку:

Код:
SELECT * FROM numbers WHERE firstname = :SearchString OR lastname = :SearchString

Далее при нажатии кнопки пишется что-то типа этого:

Код:
var
  S : String;
begin
  If InputQuery('Поиск','Кого ищем',S) Then
    Begin
      Query1.ParamByName('SearchString').AsString = S;
      Query1.Open;
      Query1.First;
      If Query1.Eof 
        Then ShowMessage('Такой не найден!') 
        Else ShowMessage('Номер: ' + Query1.FieldByName('number'));
      Query1.Close;
...
Ответить с цитированием
  #6  
Старый 01.09.2008, 17:59
Аватар для artemavd
artemavd artemavd вне форума
Начинающий
 
Регистрация: 05.08.2008
Сообщения: 115
Репутация: 12
По умолчанию

А что здесь означает "*"?)

Код:
SELECT * FROM numbers WHERE firstname = :SearchString OR lastname = :SearchString


Код:
var
  S : String;
begin
  If InputQuery('Поиск','Кого ищем',S) Then
    Begin
      Query1.ParamByName('SearchString').AsString = S;
      Query1.Open;
      Query1.First;
      If Query1.Eof 
        Then ShowMessage('Такой не найден!') 
        Else ShowMessage('Номер: ' + Query1.FieldByName('number'));
      Query1.Close;
...
Я записал процедуру, которую ты предложил. Но при компиляции компилятор не компилирует программу и выделяет строчку:
Код:
 Else ShowMessage ('Номер: ' + Query1.FieldByName ('number')); 
А внизу пишет ошибку типа:
Код:
Incompatible types: ‘String’ and ‘TField’
Что значит эта ошибка? Как с ней бороться? Если я комментирую строчку
Код:
 Else ShowMessage ('Номер: ' + Query1.FieldByName ('number')); 
и запускаю программу, то когда я ввожу фамилию или имя и нажимаю на кнопке "ОК" мне выдается такаю ошибка:
Код:
 Query1: Parameter ‘SearchString’ not found
Что делать?)
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 15:54.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025