|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Как сделать выборку из БД через Edit?
Здравствуйте! У меня есть база данных (Table) содержащая различные электродвигатели. При вводе в Edit значения мощности двигателя, мне необходимо что бы программа выбрала из БД двигатель мощностью равной или большей чем введенный в Edit, и занесла все значения выбранного двигателя в StringGrid. Заранее спасибо!
|
#2
|
||||
|
||||
Лучше и правильнее работать не с таблицей, а с запросом к таблице. Тогда делаешь простенький запрос:
Код:
Query1.SQL.Text := 'select * from ElectricMotor where Power >= ' + Edit1.Text; Query1.Open; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
Ну, не факт.
Человек может уже отфильтровал выборку и теперь хочет "поиграться" с результатами. тогда использование события OnFilterrecord удобнее. |
#4
|
|||
|
|||
Я в программировании новичок. Вы не могли бы поподробнее описать код выборки. И ещё, БД у меня сделана в Table, а не в Query. Заранее спасибо!
|
#5
|
||||
|
||||
Ну если делать так как говорит Imikle то примерно так:
Код:
if Table1.Filter = '' then Table1.Filter := 'Power >= ' + Edit1.Text else Table1.Filter := Table1.Filter + ' and Power >= ' + Edit1.Text; Table1.Filtered := True; Но если очень хочется именно через TStringGrid то так: Код:
StringGrid1.RowCount := Table1.RecordCount + 1; StringGrid1.ColCount := Table1.Fields.Count; for Col := 0 to StringGrid1.ColCount - 1 do StringGrid1.Cells[Col,0] := Table1.Fields[Col].FieldName; for Row := 1 to StringGrid1.RowCount - 1 do begin for Col := 0 to StringGrid1.ColCount - 1 do StringGrid1.Cells[Col,Row] := Table1.Fields[Col].asString; Table1.Next; end; Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. Последний раз редактировалось Страдалецъ, 25.01.2011 в 09:55. |
#6
|
|||
|
|||
В моем варианте это не код выборки а просто условие отбора записей. На паскале.
|
#7
|
|||
|
|||
Будьте добры, подскажите, где в моём коде ошибка при занесении выбранного движка в StringGrid. Заранее благодарю!
Код:
procedure TForm1.Button1Click(Sender: TObject); var Pnom:Real; begin Pnom:=StrToFloat(Edit3.Text); if Table1.Filter = '' then Table1.Filter := 'Pnom >= ' + Edit3.Text else Table1.Filter := Table1.Filter + ' and Pnom >= ' + Edit3.Text; Table1.Filtered := True; end; var Pnom:Real; i,j:integer; begin for i:=0 to 8 do for j:=1 to 100 do StringGrid1.Cells[i,j]:=''; Table1.First; j:=1; for i:=1 to Table1.RecordCount do begin Pnom:=0; if Pnom then begin StringGrid1.Cells[0,j]:=Table1.FieldValues['Tiporazmer']; StringGrid1.Cells[1,j]:=Table1.FieldValues['Pnom']; StringGrid1.Cells[2,j]:=FloatToStrF(Table1.FieldValues['Inom'],ffFixed,4,1); StringGrid1.Cells[3,j]:=FloatToStrF(Table1.FieldValues['KPD'],ffFixed,5,1); StringGrid1.Cells[4,j]:=FloatToStrF(Table1.FieldValues['cos f'],ffFixed,4,1); StringGrid1.Cells[5,j]:=FloatToStrF(Table1.FieldValues['Ip/In'],ffFixed,4,1); StringGrid1.Cells[6,j]:=FloatToStrF(Table1.FieldValues['Mp/Mn'],ffFixed,4,1); StringGrid1.Cells[7,j]:=FloatToStrF(Table1.FieldValues['Mmax/Mn'],ffFixed,4,1); StringGrid1.Cells[8,j]:=FloatToStrF(Table1.FieldValues['N'],ffFixed,4,1); j:=j+1; end; {if} Table1.Next; end; end; end. Последний раз редактировалось Admin, 25.01.2011 в 10:07. |
#8
|
||||
|
||||
Код:
...if Pnom then begi... Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#9
|
|||
|
|||
Ну а как же всё таки будет выглядеть верный код? Никак не могу разобраться!
|
#10
|
|||
|
|||
не совсем вкурил в код, откуда там посреди var? вот тут:
Код:
Table1.Filtered := True; end; var Pnom:Real; i,j:integer; begin Код:
Pnom:=0; if Pnom then begin и как вам указали Код:
if Pnom then Например Код:
if Pnom=0 then хотя вопрос больше а нафига оно вообще здесь, это условие? Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#11
|
|||
|
|||
Подскажите пожалуйста, где поправить код. Постоянно выходит ошибка в конце
Код:
[Error] Unit1.pas(405): '.' expected but 'END' found Код:
procedure TForm1.Button1Click(Sender: TObject); var Pnom:Real; begin Pnom:=StrToFloat(Edit3.Text); if Table1.Filter = '' then Table1.Filter := 'Pnom >= ' + Edit3.Text else Table1.Filter := Table1.Filter + ' and Pnom >= ' + Edit3.Text; Table1.Filtered := True; end; var Pnom:Real; i,j:integer; begin for i:=0 to 8 do for j:=1 to 100 do Form1.StringGrid1.Cells[i,j]:=''; Form1.Table1.First; {ïåðåõîä íà ïåðâóþ çàïèñü áàçû äàííûõ} j:=1; for i:=1 to Form1.Table1.RecordCount do {öèêë äî êîíöà áàçû} begin Pnom:=0; Form1.StringGrid1.Cells[0,j]:=Form1.Table1.FieldValues['Tiporazmer']; Form1.StringGrid1.Cells[1,j]:=Form1.Table1.FieldValues['Pnom']; Form1.StringGrid1.Cells[2,j]:=FloatToStrF(Form1.Table1.FieldValues['Inom'],ffFixed,4,1); Form1.StringGrid1.Cells[3,j]:=FloatToStrF(Form1.Table1.FieldValues['KPD'],ffFixed,5,1); Form1.StringGrid1.Cells[4,j]:=FloatToStrF(Form1.Table1.FieldValues['cos f'],ffFixed,4,1); Form1.StringGrid1.Cells[5,j]:=FloatToStrF(Form1.Table1.FieldValues['Ip/In'],ffFixed,4,1); Form1.StringGrid1.Cells[6,j]:=FloatToStrF(Form1.Table1.FieldValues['Mp/Mn'],ffFixed,4,1); Form1.StringGrid1.Cells[7,j]:=FloatToStrF(Form1.Table1.FieldValues['Mmax/Mn'],ffFixed,4,1); Form1.StringGrid1.Cells[8,j]:=FloatToStrF(Form1.Table1.FieldValues['N'],ffFixed,4,1); j:=j+1; Form1.Table1.Next; end; end end. Заранее спасибо! |
#12
|
|||
|
|||
Я исправил код, но как сделать так, чтобы отфильтрованные значения заносились только в StringGrid, а сама БД оставалась нетронутой?
|
#13
|
|||
|
|||
БД (Если код конечно такой какой приведен) остается не тронутой.
свойство Filter фильтрует данные в кэше физически они как были в таблицах так и остались. ПС. не совсем понятно зачем использовать StringGrid ?! почему не использовать DBGrid? Новый вирус - "БОМЖ"! Он просто роется в Корзине...и спит под ярлычком "Сетевое окружение" |
#14
|
|||
|
|||
У меня, на форме программы, есть отдельная вкладка, в которой можно просмотреть всю базу, но как только я ввожу в Edit какое либо число и нажимаю Кнопку, у меня из БД фильтруются все позиции которые меньше чем введенный в Edit. БД возвращается в своё исходное состояние только после перезапуска программы. Как быть?
|