![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Есть БД аксес, сейчас поиск и формирование отчета происходит по дате рождения, помогите сделать по ФИО.
Вот часть кода формы поиска: Код:
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, 04.02.2010 в 11:46. |
|
#2
|
||||
|
||||
|
У Вас ФИО это одно поле или 3(имя,фамилия,отчество)?
|
|
#3
|
|||
|
|||
|
Вообще 3 мя, но если можно подскажите как сделать отдельно Фамилию это поле Familia
И все вместе 3 мя поля ми |
|
#4
|
||||
|
||||
|
Надо просто сделать другой запрос,как-то так:
Код:
Это поиск по фамилии
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
|
|||
|
|||
|
Если делаю как написано выскакивает след
[Error] Unit7.pas(42): Undeclared identifier: 'family' [Fatal Error] Diplom.dpr(11): Could not compile used unit 'Unit7.pas' Если делаю так sql:='Upper(Family)'; ТО опять ни чего не происходит открываеться файл htm отчета пустой. |
|
#6
|
||||
|
||||
|
family - это переменная, которой надо присвоить значение!
Код:
procedure TForm7.Button1Click(Sender: TObject); var family:string; .............. family:='petrov'; ................. |
|
#7
|
|||
|
|||
|
Если делаю так:
Код:
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
|
||||
|
||||
|
тогда попробуй без upper
Код:
...........
family:='petrov';
sql:='Family='+family;
ADOQuery10.SQL.Add('SELECT Tab_nomer FROM Sotrydnik WHERE '+sql);
.............
|
|
#9
|
|||
|
|||
|
Все равное открывает весь список
а вопрос зачем это: family:='petrov'; ? Когда под family предпологаеться выбор из всего списка одну фамилию. Может такой косяк получаеться из за того что в этой форме есть вывод отчета по полу ? |
|
#10
|
||||
|
||||
|
Цитата:
Пол думаю не причем Скинь свой исходник я посмотрю в чем проблема |
|
#11
|
|||
|
|||
|
Код:
ADOQuery10.Close;
ADOQuery10.SQL.Clear;
ADOQuery10.SQL.Add('SELECT Tab_nomer FROM Sotrydnik WHERE Family = :Family');
ADOQuery10.Parameters.ParamByName('Family').Value := 'petrov';
ADOQuery10.Open; |