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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 04.02.2010, 11:37
dvtimofei dvtimofei вне форума
Прохожий
 
Регистрация: 04.02.2010
Сообщения: 5
Репутация: 10
По умолчанию Поиск по бд акссес

Есть БД аксес, сейчас поиск и формирование отчета происходит по дате рождения, помогите сделать по ФИО.
Вот часть кода формы поиска:
Код:
unit Unit7;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, ADODB,shellapi;

type
TForm7 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Label2: TLabel;
ComboBox1: TComboBox;
Button1: TButton;
ADOQuery10: TADOQuery;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form7: TForm7;

implementation
uses main;

{$R *.dfm}

procedure TForm7.Button1Click(Sender: TObject);
var
F: TextFile;
sql:String;
b:Integer;
begin
ADOQuery10.SQL.Clear;
b:=0;
if(Edit1.Text<>'')then
begin
sql:='Data_rogdenie=DateValue("'+Edit1.Text+'")';
b:=1;
end;
if(ComboBox1.Text<>'')then
begin
if(b=1)then
sql:=sql+' AND ';
sql:='Pol="'+ComboBox1.Text+'"';
b:=1;
end;
ADOQuery10.SQL.Add('SELECT Tab_nomer FROM Sotrydnik WHERE '+sql);
try
ADOQuery10.Active:=True;
except
ShowMessage('Произошла исключительная ситуация: Не могу поместить данные! Обратитесь к разработчику программы.');
end;
with Form1 do
begin
AssignFile(F, 'report.htm');
Rewrite(F);
Writeln(F,'<html><head><title>Отчет по сотруднику сотруднику</title><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"></head><body>');
Admin: Пользуемся тегами!

Последний раз редактировалось Admin, 04.02.2010 в 11:46.
Ответить с цитированием
  #2  
Старый 04.02.2010, 12:16
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

У Вас ФИО это одно поле или 3(имя,фамилия,отчество)?
Ответить с цитированием
  #3  
Старый 04.02.2010, 12:20
dvtimofei dvtimofei вне форума
Прохожий
 
Регистрация: 04.02.2010
Сообщения: 5
Репутация: 10
По умолчанию

Вообще 3 мя, но если можно подскажите как сделать отдельно Фамилию это поле Familia
И все вместе 3 мя поля ми
Ответить с цитированием
  #4  
Старый 04.02.2010, 12:36
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

Надо просто сделать другой запрос,как-то так:
Код:
Это поиск по фамилии
sql:='Upper(Familia)=Upper('+familia+')';  // upper-нужен что бы сделать регистронезависимый поиск
....................
ADOQuery10.SQL.Add('SELECT Tab_nomer FROM Sotrydnik WHERE '+sql);

Общий поиск:
sql:='Upper(Familia)=Upper('+familia+') AND Upper(NAME)=Upper('+name+'') AND Upper(Otchestvo)=upper('+otchestvo+')';
ADOQuery10.SQL.Add('SELECT Tab_nomer FROM Sotrydnik WHERE '+sql);

где familia,name,otchestvo - переменные типа string в которых хранятся необходимые фамилия,имя,отчество
Ответить с цитированием
  #5  
Старый 04.02.2010, 12:50
dvtimofei dvtimofei вне форума
Прохожий
 
Регистрация: 04.02.2010
Сообщения: 5
Репутация: 10
По умолчанию

Если делаю как написано выскакивает след
[Error] Unit7.pas(42): Undeclared identifier: 'family'
[Fatal Error] Diplom.dpr(11): Could not compile used unit 'Unit7.pas'

Если делаю так
sql:='Upper(Family)';
ТО опять ни чего не происходит открываеться файл htm отчета пустой.
Ответить с цитированием
  #6  
Старый 04.02.2010, 13:02
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

family - это переменная, которой надо присвоить значение!
Код:
procedure TForm7.Button1Click(Sender: TObject);
var
family:string;
..............
family:='petrov';
.................
Ответить с цитированием
  #7  
Старый 04.02.2010, 13:24
dvtimofei dvtimofei вне форума
Прохожий
 
Регистрация: 04.02.2010
Сообщения: 5
Репутация: 10
По умолчанию

Если делаю так:
Код:
procedure TForm7.Button1Click(Sender: TObject);
var
  F: TextFile;
  sql:String;
  Family:String;
  b:Integer;
...................
 sql:='Upper(Family)=Upper('+family+')';  
Пишет;
Неопределенная функция Upper в выражении
и выделяет 
  ADOQuery10.Active:=True;

Если делаю так

Если делаю так:
procedure TForm7.Button1Click(Sender: TObject);
var
  F: TextFile;
  sql:String;
  Family:String;
  b:Integer;
...................
 sql:='Family';

Работает только отчет создает по всем пользователем а не по нужному

Последний раз редактировалось dvtimofei, 04.02.2010 в 13:36.
Ответить с цитированием
  #8  
Старый 04.02.2010, 13:35
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

тогда попробуй без upper
Код:
...........
family:='petrov';
sql:='Family='+family;
ADOQuery10.SQL.Add('SELECT Tab_nomer FROM Sotrydnik WHERE '+sql);
.............
 
Ответить с цитированием
  #9  
Старый 04.02.2010, 13:52
dvtimofei dvtimofei вне форума
Прохожий
 
Регистрация: 04.02.2010
Сообщения: 5
Репутация: 10
По умолчанию

Все равное открывает весь список

а вопрос зачем это:
family:='petrov'; ?
Когда под family предпологаеться выбор из всего списка одну фамилию.

Может такой косяк получаеться из за того что в этой форме есть вывод отчета по полу
?
Ответить с цитированием
  #10  
Старый 05.02.2010, 09:30
Аватар для friz
friz friz вне форума
Местный
 
Регистрация: 04.04.2008
Адрес: Минск
Сообщения: 596
Версия Delphi: 2007 & JAVA EE
Репутация: 10670
По умолчанию

Цитата:
а вопрос зачем это:
family:='petrov'; ?
Это пример, т.е. должно выдать товарища с фамилией петров
Пол думаю не причем
Скинь свой исходник я посмотрю в чем проблема
Ответить с цитированием
  #11  
Старый 05.02.2010, 17:21
Babuca Babuca вне форума
Прохожий
 
Регистрация: 09.08.2009
Сообщения: 27
Репутация: 10
По умолчанию

Код:
  ADOQuery10.Close;
  ADOQuery10.SQL.Clear;
  ADOQuery10.SQL.Add('SELECT Tab_nomer FROM Sotrydnik WHERE Family = :Family');
  ADOQuery10.Parameters.ParamByName('Family').Value := 'petrov';
  ADOQuery10.Open;
во попробуи такои запрос.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

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

ВКонтакте   Facebook   Twitter