|
#1
|
|||
|
|||
SQL запрос
Доброго всем времени суток!
Бьюсь над решением следующей задачи, но пока, что-то ничего не получается. Есть база данных, состоящая из двух таблиц: NAME и STEP (см. вложения) Связь м/у табл. по полям IndexName и IndexName1. Вот код с которым работаю: Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DBCtrls; type TForm1 = class(TForm) ComboBox1: TComboBox; ComboBox2: TComboBox; procedure FormActivate(Sender: TObject); procedure ComboBox1Click(Sender: TObject); procedure ComboBox1Change(Sender: TObject); private { Private declarations } public { Public declarations } end; type TINDEX = class INDEX: integer; end; var Form1: TForm1; implementation uses Unit2; {$R *.dfm} procedure TForm1.ComboBox1Change(Sender: TObject); begin with unit2.DataModule2.ADOQuery1 do begin unit2.DataModule2.ADOQuery1.Active:= False; unit2.DataModule2.ADOQuery1.SQL.Clear; unit2.DataModule2.ADOQuery1.SQL.Add('select * from name, step'); unit2.DataModule2.ADOQuery1.SQL.Add('where name = combobox1.Text'); unit2.DataModule2.AdoQuery1.Parameters[0].AsInteger := TCod(ComboBox.Items.Objects[ComboBox.ItemIndex]).Cod; unit2.DataModule2.ADOQuery1.Active:= True; combobox2.Items.Clear; while not unit2.DataModule2.ADOQuery1.Eof do begin combobox2.Items.Add(unit2.DataModule2.AdoQuery1.FieldByName('step').AsString); unit2.DataModule2.ADOQuery1.Next; end; end; end; procedure TForm1.ComboBox1Click(Sender: TObject); begin ComboBox2.SetFocus; end; procedure TForm1.FormActivate(Sender: TObject); const ADOProvider='Provider=Microsoft.Jet.OLEDB.4.0; Data Source='; var path:string; PINDEX: TINDEX; begin Path:=Application.ExeName; Path:=ExtractFileDir(Path); if Path[Length(Path)]<>'\' then Path:=Path+'\'+'DataBase'+'\'; unit2.DataModule2.ADOConnection1.ConnectionString:=ADOProvider+Path+'Base.mdb'; unit2.DataModule2.ADOConnection1.Open; unit2.DataModule2.ADOTable1.Active:=True; ComboBox1.Items.Clear; unit2.DataModule2.ADOTable1.First; while not unit2.DataModule2.ADOTable1.EOF do begin PINDEX := TINDEX.Create; PINDEX.INDEX := unit2.DataModule2.ADOTable1.FieldByName('IndexName').AsInteger; ComboBox1.Items.AddObject(unit2.DataModule2.ADOTable1.FieldByName('Name').AsString, PINDEX); unit2.DataModule2.ADOTable1.Next; end; if (combobox1.Items.Count > 0) then Combobox1.ItemIndex := 0; end; end. Спасибо. Последний раз редактировалось kobz, 26.11.2012 в 10:53. |
#2
|
|||
|
|||
Неужели никто не может помочь, подсказать???
|
#3
|
||||
|
||||
1. почему именно ComboBox, а не DBLookupComboBox ?
2. запрос должен быть примерно таков: Код:
Query.SQL.Text:='SELECT * FROM step WHERE IndexName1 = :p_index'; Query.ParamByName('p_index').asInteger := <значение>; Query.Open; Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|