Доброго времени суток=)
база данных на firebird, интерфейс на lazarus. Соединение через IBConnection, SLQQuery, DataSourse, SQLTransactoin. вывод данных через DbGrid.
вопрос такой: есть 2 таблицы (table1 и table2 допустим). В DBGrid (table1) есть поле в выпадающим списком (поле из table2). Надо чтобы при выборе определенного значения в этом списке и при нажатии кнопки заполнялись соответствующие поля из table2.
код заполнения:
procedure TForm10.Button1Click(Sender: TObject);
var k,i:integer;
p:string;
begin
k:=DBGrid1.DataSource.DataSet.FieldByName('n_dog').Value;
dm.SQLQuery9.First;
For i:=0 to (dm.SQLQuery9.RecordCount-1) do
begin
if dm.SQLQuery9.FieldByName('N').AsString<>IntToStr(k) Then
begin
p:=dm.DataSource9.DataSet.Fields[4].AsString;
end
else
// до этого момента все работает правильно
DBGrid1.DataSource.DataSet.Fields[6].Value:=p;
dm.SQLQuery9.Next;
end;
end;
end;
какая ошибка? почему не заполняет?
спасибо заранее =)
14 марта 2010 в 23:03
спасибо, все получилось!!!!!!!!!!
14 марта 2010 в 23:02
ыыы )
я не знаком с вашей объектной моделью, но должно быть что-то вроде
For i:=0 to (dm.SQLQuery9.RecordCount-1) do
begin
if dm.SQLQuery9.FieldByName('N').AsString<>IntToStr(k) Then
begin
p:=dm.DataSource9.DataSet.Fields[4].AsString;
end
else begin
if DBGrid1.DataSource.DataSet.EOF Then
DBGrid1.DataSource.DataSet.AddNew;
else
DBGrid1.DataSource.DataSet.Edit;
DBGrid1.DataSource.DataSet.Fields[6].Value:=p;
DBGrid1.DataSource.DataSet.Update;
end;
dm.SQLQuery9.Next;
end;
14 марта 2010 в 22:05
есть записи, и надо чтобы это работало и при заполнении новой строки и при редактировании
написала так:
For i:=0 to (dm.SQLQuery9.RecordCount-1) do
begin
DBGrid1.DataSource.DataSet.RecordCount;
if dm.SQLQuery9.FieldByName('N').AsString<>IntToStr(k) Then
тож не помогло, все таже ошибка:
SQLQuery10: Operation not allowed, dataset "SQLQUery10" is not in an edit or insetr state.
SQLQuery10 – это table2
14 марта 2010 в 22:04
не помогает, он раньше спотыкается…. на этой строчке
DBGrid1.DataSource.DataSet.Fields[6].Value:=p;
сразу ошибка
14 марта 2010 в 22:04
а у вас записи в гриде вообще есть?
DBGrid1.DataSource.DataSet.RecordCount
14 марта 2010 в 22:03
перематывать, это:
DBGrid1.DataSource.DataSet.Close;
……..
DBGrid1.DataSource.DataSet.Open;
???
14 марта 2010 в 22:03
DBGrid1.DataSource.DataSet.Next;
14 марта 2010 в 22:02
а перематывать DBGrid1 не надо?