![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Осваиваю 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 |