![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Здравствуйте! У меня есть база данных (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. |