Цитата:
Сообщение от lmikle
Не подойдет?
Вместо строковой константы можно использовать параметр.
только надо учесть, что ID второй таблицы должен быть уникален (фактически, будет лучше всего, если он будет первичным ключем), иначе запрос будет ругаться.
|
Подставил запрос предложениый тобой...
при выполнении запроса ругается на параметр :
"ADOQuery4:Parameter 'f' not found"
не могу понять что ему не нравится
Если что вот код:
Код:
procedure TForm4.FormCreate(Sender: TObject);
begin
with ADOQuery1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT p.data, s.code_s, p.Code_p, s.Gruppa, s.Familia, s.Ima, s.Ochestvo, p.vid_Propuska, p.Kol_vo_chas' );
SQL.Add('FROM stud s, propuski p');
SQL.Add('WHERE s.code_s = p.code_s');
SQL.Add('ORDER BY s.familia');
Open;
end;
with ADOQuery2 do begin
Close;
SQL.Clear;
SQL.Add('SELECT Familia FROM stud');
SQL.Add('ORDER BY Familia');
Open;
end;
ADOQuery2.First;
While not ADOQuery2.Eof do begin
ComboBox1.Items.Add(ADOQuery2.Fields[0].AsString);
ADOQuery2.Next;
end;
//---------------------------------------
with ADOQuery3 do begin
Close;
SQL.Clear;
SQL.Add('SELECT Gruppa FROM grupp');
SQL.Add('ORDER BY Gruppa');
Open;
end;
ADOQuery3.First;
While not ADOQuery3.Eof do begin
ComboBox2.Items.Add(ADOQuery3.Fields[0].AsString);
ADOQuery3.Next;
end;
end;
procedure TForm4.Button1Click(Sender: TObject);
begin
with ADOQuery4 do begin
Close;
SQL.Clear;
SQL.Add('INSERT INTO propuski ( code_s, Data, Vid_propuska, Kol_vo_chas )');
SQL.Add('VALUES ( (SELECT Code_s FROM stud WHERE Familia = f ), :d, :v, :k)');
Parameters.ParseSQL(SQL.Text,true);
Parameters.ParamByName('v').Value:= ComboBox3.Text; //вид пропуска
Parameters.ParamByName('d').Value:= DateTimePicker1.Date; //дата
Parameters.ParamByName('k').Value:= Edit1.Text; //количеставо часов
Parameters.ParamByName('f').Value:= ComboBox1.Text; //фамилия
ExecSQL;
end;
with ADOQuery1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT p.data, s.code_s, p.Code_p, s.Gruppa, s.Familia, s.Ima, s.Ochestvo, p.vid_Propuska, p.Kol_vo_chas' );
SQL.Add('FROM stud s, propuski p');
SQL.Add('WHERE s.code_s = p.code_s');
SQL.Add('AND p.Data = :d');
SQL.Add('AND s.familia = :f');
SQL.Add('ORDER BY s.familia');
Parameters.ParseSQL(SQL.Text,true);
Parameters.ParamByName('d').Value:= DateTimePicker1.Date;
Parameters.ParamByName('f').Value:= ComboBox1.Text;
Open;
end;
end;
procedure TForm4.ComboBox1Enter(Sender: TObject); //фамилия
Var i:integer;
begin
With ADOQuery5 do begin
Close;
SQL.Clear;
SQL.Add('SELECT DISTINCT familia FROM stud');
SQL.Add('WHERE Gruppa LIKE '+quotedStr(ComboBox2.Text));
SQL.Add('ORDER by familia');
Open;
end;
ADOQuery5.First;
ComboBox1.Items.Clear;
While not ADOQuery5.eof do //Заполняем ComboBox1
begin
ComboBox1.Items.Add(ADOQuery5.Fields[0].AsString);
ADOQuery5.Next;
end;
end;
procedure TForm4.Button2Click(Sender: TObject); //показ всех пропусков
Var i:integer;
begin
with ADOQuery1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT p.data, s.code_s, p.Code_p, s.Gruppa, s.Familia, s.Ima, s.Ochestvo, p.vid_Propuska, p.Kol_vo_chas' );
SQL.Add('FROM stud s, propuski p');
SQL.Add('WHERE s.code_s = p.code_s');
SQL.Add('ORDER BY s.familia, p.Date');
Open;
end;
end;
procedure TForm4.DateTimePicker1CloseUp(Sender: TObject); //календарь
begin
with ADOQuery1 do begin
Close;
SQL.Clear;
SQL.Add('SELECT p.data, s.code_s, p.Code_p, s.Gruppa, s.Familia, s.Ima, s.Ochestvo, p.vid_Propuska, p.Kol_vo_chas' );
SQL.Add('FROM stud s, propuski p');
SQL.Add('WHERE s.code_s = p.code_s');
SQL.Add('AND p.Data = :d');
SQL.Add('ORDER BY s.familia');
Parameters.ParseSQL(SQL.Text,true);
Parameters.ParamByName('d').Value:= DateTimePicker1.Date;
Open;
end;
end;
Кто знает в чем ошибка, помогите Пажалуйста!
|