Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Поиск в Базе Данных (.db) на Delphi

16K
21 марта 2006 года
Zorro_13
3 / / 21.03.2006
Привет!
У меня такой вопрос!
У меня курсовая Телефонный справочник и я сделал таблицу Table 1.db где заголовки Фамилия Имя Адрес и Телефон. В Administrator BDE сделал базу данных "Телефонный справочник". Сделал кнопку "Поиск" !
А теперь вопрос а как сделать поиск по моей базе, я уже искал много где примеров, но не получается! Вот текст моей программы(если он поможет):

unit Kursovaja;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Grids, DBGrids, Db, DBTables, ExtCtrls, DBCtrls, StdCtrls, Buttons,
MPlayer, Menus, ActnList, QRPrntr;

type
TForm1 = class(TForm)


Table1: TTable;
Query1: TQuery;
DBNavigator1: TDBNavigator;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Button1: TButton;
procedure Button1Click(Sender: TObject);






private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}






procedure TForm1.Button1Click(Sender: TObject);
var
fam:string[50];
begin
fam:=InputBox('Поиск','Введите фамилию для поиска и нажмите ОК','');

if fam <> '' then
begin
with Form1.Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT Фамилия, Имя, Адрес');
SQL.Add('FROM ":Телефонный справочник:Table 1.db"');
SQL.Add('WHERE');
SQL.Add('(Фамилия = "'+ fam + '")');
SQL.Add('ORDER BY Имя, Фамилия');
Open;
end;
if Query1.RecordCount <> 0 then
DataSource1.DataSet:=Query1
else begin
ShowMessage('Нет записей.');
DataSource1.DataSet:=Table1;
end;

end;
end;

end.



Я попробывал сделать с помощью SQL :
В свойствах Query:
DataBaseName: Телефонный справочник
DataSource: DataSource1
Name: Query1
Active: False

Когда Active ставлю True выдает ошибку: Query1: No SQL statement available.

А если оставить False, то при поиске выдает всё время, что "Нет Записей"!

Помогите пожалуйста!
Заранее спасибо!
5
21 марта 2006 года
hardcase
4.5K / / 09.08.2005
Спешу тебя обрадовать: таблицы и имена полей в BDE нужно делать на английском языке и желательно без пробелов. Во всяком случае у меня с русскими символами глючило постоянно.
15K
21 марта 2006 года
Mattew Freeman
12 / / 11.02.2006
поделюсь с тобой опытом: такого рода я раньше был в восторге от парадокса пока не узнал что такое АДО и БД аксесс.это раз кроме запроса можно использовать фильтры. тоже мощняцкая штучка:: делается это так:
form1.table1.IndexName:='имяполя';
form1.table1.SetKey;
form1.table1.Active:=true;
form1.table1.setrange([edit1.Text],[edit2.Text]);
form1.table1.applyrange;
ну естественно поле-проиндексировано раз
два - в едиты вбиваешьь диапозоны для твого варианта подходит такие к примеру выборка всех № с 2-10-10 по 2-99-99 из всей базы.
отменяется это дело так:form1.table1.cancelyrange;
вот и все вроде бы...аДъЮ
16K
22 марта 2006 года
Zorro_13
3 / / 21.03.2006
Mattew Freeman
У меня если честно не получилось как ты сказал!
Не мог бы ты написать по подробнее!
Заранее спасибо!
16K
22 марта 2006 года
Zorro_13
3 / / 21.03.2006
Привет hardcase!

Я поменял заголовки в Таблице на Английские!
Но всё равно не работает! В SQL не хочет ставиться Active: True; выдает туже ошибку что и раньше.
При компиляции всё запускается, нажимаю кнопку Поиск открывается окно поиска, пишу фамилию и нажимаю ОК и оно выдает вот такую ошибку:
"Project Project1.exe raised exception class EdatabaseError with massage 'DataSource1: Circular datalinks are not allowed'. Process stopped. Use Step or Run to continue."

Нажимаю ОК выделяет строчку: "DataSource1.DataSet:=Query1"

Я не знаю может что-то в SQL надо прописать т.к. я там ничего не писал!
С SQL я делал только это:
Создал Query.
Поставил:Action: False (на True не ставится)
DatabaseName: STABDART1
DataSource: DataSource1
Name: Query1 (стандартно не менял)


Ну и текст программы (на всякий случай):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables;

type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
Query1: TQuery;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s: string[50];
begin
s := InputBox('Поиск','Введите фамилию и нажмите OK','');
if s <> '' then
begin
with form1.Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT Famil, Name, Telefon');
SQL.Add('FROM ":STANDARD1:Table 1.db"');
SQL.Add('WHERE');
SQL.Add('(Famil = "'+ s + '")');
SQL.Add('ORDER BY Name, Famil');
Open;
end;
if Query1.RecordCount <> 0 then
DataSource1.DataSet:=Query1
else begin
ShowMessage('Нет записей.');
DataSource1.DataSet:=Table1;
end;

Помогите пожалуйста!
Заранее спасибо!
929
22 марта 2006 года
sp999
198 / / 31.01.2003
Цитата:
Originally posted by Zorro_13
Привет hardcase!

Я поменял заголовки в Таблице на Английские!
Но всё равно не работает! В SQL не хочет ставиться Active: True; выдает туже ошибку что и раньше.
При компиляции всё запускается, нажимаю кнопку Поиск открывается окно поиска, пишу фамилию и нажимаю ОК и оно выдает вот такую ошибку:
"Project Project1.exe raised exception class EdatabaseError with massage 'DataSource1: Circular datalinks are not allowed'. Process stopped. Use Step or Run to continue."

Нажимаю ОК выделяет строчку: "DataSource1.DataSet:=Query1"

Я не знаю может что-то в SQL надо прописать т.к. я там ничего не писал!
С SQL я делал только это:
Создал Query.
Поставил:Action: False (на True не ставится)
DatabaseName: STABDART1
DataSource: DataSource1
Name: Query1 (стандартно не менял)


Ну и текст программы (на всякий случай):

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, Db, DBTables;

type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
DBGrid1: TDBGrid;
Button1: TButton;
Button2: TButton;
Query1: TQuery;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button2Click(Sender: TObject);
begin
Form1.Close;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
s: string[50];
begin
s := InputBox('Поиск','Введите фамилию и нажмите OK','');
if s <> '' then
begin
with form1.Query1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT Famil, Name, Telefon');
SQL.Add('FROM ":STANDARD1:Table 1.db"');
SQL.Add('WHERE');
SQL.Add('(Famil = "'+ s + '")');
SQL.Add('ORDER BY Name, Famil');
Open;
end;
if Query1.RecordCount <> 0 then
DataSource1.DataSet:=Query1
else begin
ShowMessage('Нет записей.');
DataSource1.DataSet:=Table1;
end;

Помогите пожалуйста!
Заранее спасибо!


Когда описываешь кляузу FROM, попробуй писать просто table1 (дабы не иметь на свою голову лишнего гимора, рекомендую таблицу все-таки переименовать, чтоб без пробелов была), а в свойстве DatabaseName объекта Query1 прописать алиас твоей БД (какой указан в BDE-администраторе), т.е. по аналогии с объектом Table1.

15K
22 марта 2006 года
Mattew Freeman
12 / / 11.02.2006
with Form1.Query1 do
begin
Close;
SQL.Clear;
SQL.Add('SELECT *');
SQL.Add('FROM "nameofbase.db"');
SQL.Add('WHERE');
SQL.Add('(nomer = "'+ nomer +'")');
Open;
Active:= TRUE;
end;
if Form1.Query1.RecordCount <> 0
then
begin
Form1.DataSource1.DataSet:= Form1.Query1;
end
else
begin
MessageDlg('НЕТ ДАННЫХ УДОВЛЕТВОРЯЮЩИХ ЗАПРОСУ.',mtInformation,[mbOk],0);
Form1.DataSource1.DataSet:= Table1;end;
это запрос
а фильтр вот таким макаром делается
begin
with Table1 do
begin
Table1.IndexName:='Spec2';
Table1.SetKey;
Table1.Active:=true;
setrange(['диапозон1'],[диапозон2]);
applyrange;
end;
ну если после этого не получается то блин пришли мне свою прогу и файлы БД без екзешника я пошаманю...не бросать же парня в беде *-)...
6
26 января 2007 года
George
4.1K / / 05.01.2007
Цитата: Zorro_13
Привет hardcase!

Я поменял заголовки в Таблице на Английские!
Но всё равно не работает! В SQL не хочет ставиться Active: True; выдает туже ошибку что и раньше.
При компиляции всё запускается, нажимаю кнопку Поиск открывается окно поиска, пишу фамилию и нажимаю ОК и оно выдает вот такую ошибку:
"Project Project1.exe raised exception class EdatabaseError with massage 'DataSource1: Circular datalinks are not allowed'. Process stopped. Use Step or Run to continue."

Нажимаю ОК выделяет строчку: "DataSource1.DataSet:=Query1"

Я не знаю может что-то в SQL надо прописать т.к. я там ничего не писал!
С SQL я делал только это:
Создал Query.
Поставил:Action: False (на True не ставится)
DatabaseName: STABDART1
DataSource: DataSource1
Name: Query1 (стандартно не менял)



У меня тоже такая фигня была. Если в свойстве DataSource компонента Query ничего не ставить, а в свойстве DataSet компонента DataSource поставить Query1 то всё путём. Попробуй.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог