-
Delphi7+DBGridEh+FireBird+IBDataSet
таблица:
CREATE TABLE RANGEIP (
ID_RANGEIP INTEGER NOT NULL,
IP1 VARCHAR(20),
IP2 VARCHAR(20),
FLAGIS SMALLINT
);
с IBDataSet делаю так:
в GeneratorField:
GEN_RANGEIP_ID -> ID_RANGEIP By 1
в InsertSQL:
insert into RANGEIP (ID_RANGEIP, IP1, IP2, FLAGIS ) values (:ID_RANGEIP, :IP1, :IP2, :FLAGIS)
в ModifySQL:
update RANGEIP set IP1=:IP1, IP2=:IP2, FLAGIS=:FLAGIS where ID_RANGEIP=:OLD_ID_RANGEIP
в RefreshSQL:
select * from RANGEIP where ID_RANGEIP=:ID_RANGEIP order by IP1
в SelectSQL:
select * from RANGEIP order by IP1
При выполнении кода:
DataModuleMain.IBDataSetRANGEIP.open;
DataModuleMain.IBDataSetRANGEIP.Insert; DataModuleMain.IBDataSetRANGEIP.ParamByName('IP1').AsString:=FormMain.EditRangeI P1.Text+'.'+FormMain.EditRangeIP2.Text+'.'+FormMain.EditRangeIP3.Text+'.'+FormMain.EditRangeIP4.Text;
DataModuleMain.IBDataSetRANGEIP.ParamByName('IP2').AsString:=FormMain.EditRangeI P5.Text+'.'+FormMain.EditRangeIP6.Text+'.'+FormMain.EditRangeIP7.Text+'.'+FormMain.EditRangeIP8.Text;
DataModuleMain.IBDataSetRANGEIP.Post;
возникает ошибка:
Field "IP1" not found -
> [0] Alekcey © (13.08.10 11:58)
> DataModuleMain.IBDataSetRANGEIP.ParamByName('IP1').AsString:
> =FormMain.EditRangeI P1.Text+'.'+FormMain.EditRangeIP2.Text+'.'+FormMain.
> EditRangeIP3.Text+'.'+FormMain.EditRangeIP4.Text;
Присваивать значения надо ПОЛЯМ, а не параметрам. -
понял, спасибо
-
Мужики, удобный компонент оказывается, надо взять на вооружение.
для MS SQL Server подобного компонента с SelectSQL, DeleteSQL ... не подскажите? -
на гриде CheckBox сделал. устанавливаю флаг. закрываю программу, запускаю снова, флаг не установлен.
Если ставлю флаги на нескольких полях закрываю программу, запускаю снова, флаги установлены только на некоторых полях.
Я так понял транзакцию комитить надо. в каком методе это делать или? или.. или как?
в транзакции Read_Committed -
на FormShow:Way_to_database:=Application.ExeName;
while Way_to_database[length(Way_to_database)]<>'\' do
delete(Way_to_database,length(Way_to_database),1);
DataModuleMain.IBDatabaseMain.Connected:=false;
DataModuleMain.IBDatabaseMain.DatabaseName:=Way_to_database+'BDSCANIP.fdb';
DataModuleMain.IBDatabaseMain.Connected:=true;
DataModuleMain.IBTransactionRANGEIP.Active:=true;
DataModuleMain.IBDataSetRANGEIP.open;
DataModuleMain.IBDataSetRANGEIP.First;
DataModuleMain.IBDataSetRANGEIP.Last;
DataModuleMain.IBDataSetRANGEIP.First;
Transaction Properties= Read_Committed
добавляю запись:DataModuleMain.IBDataSetRANGEIP.open;
DataModuleMain.IBDataSetRANGEIP.Insert; DataModuleMain.IBDataSetRANGEIP.FieldByName('IP1').AsString:=FormMain.EditRangeI P1.Text+'.'+FormMain.EditRangeIP2.Text+'.'+FormMain.EditRangeIP3.Text+'.'+FormMain.EditRangeIP4.Text; DataModuleMain.IBDataSetRANGEIP.FieldByName('IP2').AsString:=FormMain.EditRangeI P5.Text+'.'+FormMain.EditRangeIP6.Text+'.'+FormMain.EditRangeIP7.Text+'.'+FormMain.EditRangeIP8.Text;
DataModuleMain.IBDataSetRANGEIP.FieldByName('FLAGIS').AsInteger:=1;
DataModuleMain.IBDataSetRANGEIP.Post;
Удаляю запись:if DataModuleMain.IBDataSetRANGEIP.FieldByName('ID_RANGEIP').Value<>null then
begin
DataModuleMain.IBDataSetRANGEIP.Delete;
DataModuleMain.IBDataSetRANGEIP.open;
end;
Всё вышеперечисленное работает нормально. и коммитится сразу, а checkBox сохраняется не на всех записях -
> [5] Alekcey © (13.08.10 15:53)
> Всё вышеперечисленное работает нормально. и коммитится сразу,
> а checkBox сохраняется не на всех записях
Во всем вышеперечисленном нет кода установки/переустановки флага. -
а никакой код и не писал
CheckBoxces в true
и
в KeyList 1 и 0 -
> [7] Alekcey © (13.08.10 16:28)
> а никакой код и не писал
> [5] Alekcey © (13.08.10 15:53)
> добавляю запись:
> Удаляю запись:
После чего именно
> checkBox сохраняется не на всех записях
?