|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Осваиваю SQL запросы
Осваиваю SQL запросы). Помогите мне записать пожалуйста SQL-запрос. У меня есть БД, в которой хранитится мобильный номер какого-то человека, его фамилия и имя, которая называется nomera.db. Мне надо, чтобы по моему запросу выводилась фамилия, имя и мобильный номер нужного мне человека. Как мне правильно организовать работу компонента Query, чтобы он работал? Что мне надо прописать в его свойстве SQL strings? Напишите пожалуйста код, чтобы я понял как правильно составлять запросы) Заранее благодарю))
|
#2
|
|||
|
|||
Во-первых, нужно привести пример своей логики (напр.: известны фамилия и имя, найти телефон; или известен телефон, найти фамилию и имя).
Во-вторых, куда выводить: в отдельные поля (часть данных уже известна и её можно не искать) или в таблицу? Что делать если ответ не единственный? Вообще, лучше дать определение таблицы (какие поля, есть ли Primary Key). Нужно ли использовать параметры? |
#3
|
|||
|
|||
В общем случае:
SELECT * FROM nomera далее, в зависимости от задачи к этому запросу добавляются модификаторы: [LEFT|RIGHT|INNER] JOIN ON - соединение таблиц WHERE - условия фильтрации ORDER BY [ASC|DESC] - сортировка GROU BY - группировка остальные, типа HAVING, используются реже. Если нужны не все поля таблицы (таблиц), то вместо '*' можно просто их перечислить через запятую. А вообще в интернете есть вполне приличные учебники по SQL для новичков. По поводу использования в Delphi. Как ты введешь запрос в соотв. свойстве SQL никого, кроме тебя, не волнует. Главное, что бы он был синтаксически правильным, а как ты будешь бить его на строки все равно. TQuery работает абсолютно так же, как TTable за исключением того, что для все операций используются соотв. запросы, которые надо указать самому. |
#4
|
||||
|
||||
AlexSKu, задача логики простая). Нужно зная фамилию (или имя) человека найти в БД его номер телефона. Выводить можно либо в Label, либо в DBEdit, либо в StringGrid, либо показывать просто messagebox с номером телефона. Как угодно. Поля в таблице следующие: Фамилия, Имя, Мобильный телефон. Первичного ключа нет. Imikle, а можно пожалуйста к моей задаче применительно написать? Задача: есть фамилия и имя, нужно узнать мобильный номер человека. И если можно, то напишите плиз куда прописывать: в свойство TStrings компонента Query или в процедуру кнопки?)
|
#5
|
|||
|
|||
прописывать в свойство 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
|
||||
|
||||
А что здесь означает "*"?)
Код:
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 |
#7
|
|||
|
|||
1) * означает - вернуть все поля таблицы.
2) По поводу ошибки, да, мысль убежала дпльше, чуть-чуть не дописал. Надо: Код:
Else ShowMessage ('Номер: ' + Query1.FieldByName ('number').AsString); |
#8
|
||||
|
||||
Я открыл свойство Param компонента Query, выбрал строку "SearchString" и прописал так ее свойства:
DataType=ftString Name=:SearchString NumericScale=0 ParamType=ptInputOutput Precision=0 Size=0 Value.Type=Строка У второй строки, которая до изменения была "TParam" я поменял название на "ParamByName" и ее свойства прописал так: DataType=ftString Name=ParamByName NumericScale=0 ParamType=ptInputOutput Precision=0 Size=0 Value.Type=Unassigned И если я запускаю программу и в строке поиска ничего не ввожу или ввожу какую-нибудь фамилию и имя (они имеются в БД), нажимаю на "ОК", то появляется ошибка: "Invalid use of keyword. Token:SearchString Line Number: 1." Может где-то я неправильно прописал в свойствах Query? |
#9
|
|||
|
|||
У меня всё работает после небольших исправлений:
Код:
procedure TForm1.Button1Click(Sender: TObject); 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').AsString); Query1.Close; end; end; Параметр "SearchString" : DataType=ftString ( оставить без двоеточия: Name=SearchString) ParamType=ptInput |
#10
|
||||
|
||||
"Invalid use of keyword.
Token:SearchString Line Number: 1." Выдает все ту же ошибку((. AlexSku, не могли бы вы выложить исходник с примером, чтобы я мог посмотреть где я туплю? |
#11
|
|||
|
|||
Начало utit'а:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, DB, DBTables, StdCtrls; type TForm1 = class(TForm) Button1: TButton; Query1: TQuery; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; Код:
object Form1: TForm1 Left = 263 Top = 103 Width = 507 Height = 395 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Button1: TButton Left = 40 Top = 112 Width = 75 Height = 25 Caption = 'Button1' TabOrder = 0 OnClick = Button1Click end object Query1: TQuery DatabaseName = 'DBDEMOS' SQL.Strings = ( 'SELECT * FROM numbers WHERE firstname = :SearchString OR lastnam' + 'e = :SearchString') Left = 40 Top = 24 ParamData = < item DataType = ftString Name = 'SearchString' ParamType = ptInput end item DataType = ftString Name = 'SearchString' ParamType = ptInput end> end end |