[RESUELTO] Either BOF or EOF is True
#1
Escrito 22 marzo 2010 - 05:34
bueno como dice el titulo...me sale un error cuando desabilito todos los tabsheets de mi pagecontrol
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record
creo que debe ser porq tengo codigo que se ejecuta cuando se hace el cambio entre los tabsheets(consultas query)
lo que yo quiero es poder desabilitar todo el pagecontrol.
spero que alguno me de una manito heheeh..saludos.
#2
Escrito 22 marzo 2010 - 06:36
El PageControl tiene la propiedad Enabled le puedes asignar False con esto deshabilitas el conjunto completo.
¿Que sentencias tienes puesto en el OnChange? Muéstranos un poco de código para ver si llegamos a entender el porque.
#3
Escrito 22 marzo 2010 - 07:20
procedure TFArticulos.PageControl1Change(Sender: TObject); begin //aca obtengo los negocios asociados un determinado articulo if pagecontrol1.ActivePage = tabsheet3 then begin ADOArtiNego2.SQL.Text := ' SELECT n.idnegocio,n.descripcion,n.abrev '+ ' FROM negocio as n, relaprne as z ' + ' where (z.idneg = n.idnegocio) AND z.idart = '+ dbedit1.Text ; ADOArtiNego2.OPEN; end; //aca lleno un combobox con los negocios asociados al articulo if pagecontrol1.ActivePage = tabsheet5 then begin combobox1.Clear; AQTempNeg.SQL.Text := ' SELECT distinct n.descripcion '+ ' FROM negocio as n, relaprne as z ' + ' where (z.idneg = n.idnegocio) AND z.idart = '+ dbedit1.Text ; AQTempNeg.Active:=true; if AQTempNeg.IsEmpty then combobox1.Clear else While not AQTempNeg.Eof do begin combobox1.Items.Add(AQTempNeg.Fields[0].Text); AQTempNeg.Next; end; AQTempNeg.Active := False; end; end;
Gracias!
#4
Escrito 22 marzo 2010 - 07:45
Saludos.
#5
Escrito 22 marzo 2010 - 08:01
procedure TFPrincipal.Articulos1Click(Sender: TObject); begin FArticulos:=TFArticulos.Create(self); //aca puse el breackpoint try FArticulos.ShowModal; FArticulos.PageControl1.TabIndex:=0; finally FArticulos.Free; end; end;
puse un breakpoint (FArticulos:=TFArticulos.Create(self) y me ahi me sale el error
no entiendo nada
#6
Escrito 22 marzo 2010 - 08:06
Saludos.
#7
Escrito 22 marzo 2010 - 09:29
#8
Escrito 22 marzo 2010 - 09:42
Intenta asi:
procedure TFPrincipal.Articulos1Click(Sender: TObject); begin FArticulos:=TFArticulos.Create(self); try FArticulos.PageControl1.TabIndex:=0; FArticulos.ShowModal; finally FArticulos.Free; end; end;
Saludos
#9
Escrito 22 marzo 2010 - 12:37
le comente lo que habia puesto en create y nada le saque las lineas que le habia puesto y nada
me aparece ese mensaje dos veces..le pongo aceptar y despues me aparece el formulario
luk2009...el dbedit1.text tiene el numero de articulo
#10
Escrito 22 marzo 2010 - 12:44
Puedes poner el codigo completo del Unit a ver si se ve algo mas?.
Saludos
#11
Escrito 22 marzo 2010 - 01:09
unit UFArticulos; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, DB, ADODB, ExtCtrls, StdCtrls, Mask, DBCtrls, Buttons, ComCtrls, CheckLst,DataModule,jpeg; type TFArticulos = class(TForm) ADOQArticulos: TADOQuery; DSQArticulos: TDataSource; DBNavigator1: TDBNavigator; PageControl1: TPageControl; TabSheet1: TTabSheet; TabSheet3: TTabSheet; BitBtn1: TBitBtn; BitBtn2: TBitBtn; Label1: TLabel; DBEdit1: TDBEdit; Panel1: TPanel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label9: TLabel; DBEdit9: TDBEdit; Panel4: TPanel; DBMemo1: TDBMemo; DBLookupComboBox1: TDBLookupComboBox; ADOTDiv: TADOTable; ADOTGrupo: TADOTable; DSTDiv: TDataSource; DSTGrupo: TDataSource; DBLookupComboBox2: TDBLookupComboBox; TClase: TADOTable; DSClase: TDataSource; DBEdit2: TDBEdit; TabSheet2: TTabSheet; Label5: TLabel; Panel3: TPanel; DSSubClase: TDataSource; BitBtn3: TBitBtn; BitBtn5: TBitBtn; ATSubClase: TADOTable; AQTemp: TADOQuery; BitBtn4: TBitBtn; DBLookupComboBox3: TDBLookupComboBox; DBLookupComboBox4: TDBLookupComboBox; Label7: TLabel; Label8: TLabel; TabSheet4: TTabSheet; Panel5: TPanel; Label20: TLabel; DBEdit8: TDBEdit; DBEdit15: TDBEdit; Label21: TLabel; GroupBox1: TGroupBox; Label10: TLabel; Label11: TLabel; DBEdit11: TDBEdit; DBLookupComboBox5: TDBLookupComboBox; ADONegocio: TADOTable; DSNegocio: TDataSource; DBGrid1: TDBGrid; ADOArtNeg: TADOTable; DSArtNeg: TDataSource; ADOArtiNego2: TADOQuery; DSrel: TDataSource; ADOArtNegidart: TIntegerField; ADOArtNegidneg: TIntegerField; ADOArtiNego2idnegocio: TIntegerField; ADOArtiNego2descripcion: TWideStringField; ADOArtiNego2abrev: TWideStringField; TabSheet5: TTabSheet; DBGrid2: TDBGrid; BitBtn6: TBitBtn; BitBtn7: TBitBtn; ADOartmar: TADOTable; DSartmar: TDataSource; ADOartmar2: TADOQuery; DSartmar2: TDataSource; ADOartmaridart: TIntegerField; ADOartmaridmar: TIntegerField; Label6: TLabel; Label12: TLabel; AQTempNeg: TADOQuery; DStempneg: TDataSource; ComboBox1: TComboBox; ADOartmar2descripcion: TStringField; ADOartmar2idmarca: TIntegerField; ADOartmar2marca: TStringField; ADOartmar2cantidad: TStringField; DBEdit3: TDBEdit; Label13: TLabel; ADOQArticulosidarticulo: TIntegerField; ADOQArticulosdescripcion: TWideStringField; ADOQArticulosunidmed: TWideStringField; ADOQArticuloscodpon: TIntegerField; ADOQArticulosindice: TBCDField; ADOQArticulossubclase: TIntegerField; ADOQArticulosnotas: TMemoField; ADOQArticulosclase: TIntegerField; ADOQArticulosgrupo: TIntegerField; ADOQArticulosdivision: TIntegerField; ADOQArticuloscantidad: TIntegerField; procedure BitBtn1Click(Sender: TObject); procedure BitBtn2Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure ADOQArticulosAfterInsert(DataSet: TDataSet); procedure ADOQArticulosBeforeInsert(DataSet: TDataSet); procedure BitBtn7Click(Sender: TObject); procedure BitBtn3Click(Sender: TObject); procedure BitBtn4Click(Sender: TObject); procedure DBLookupComboBox1Enter(Sender: TObject); procedure DBLookupComboBox2Enter(Sender: TObject); procedure DBLookupComboBox3Enter(Sender: TObject); procedure PageControl1Change(Sender: TObject); procedure DBEdit1Change(Sender: TObject); procedure BitBtn6Click(Sender: TObject); procedure ADOQArticulosAfterPost(DataSet: TDataSet); procedure ComboBox1Change(Sender: TObject); procedure BitBtn5Click(Sender: TObject); procedure FormShow(Sender: TObject); private { Private declarations } procedure InitButtons; // esto es lo nuevo public negocio :string;{ Public declarations } end; var FArticulos: TFArticulos; implementation uses UFAgregaNeg, UFSelCodigo, UFBuscaArticulos, UFAgregaMar, Principal; {$R *.dfm} // de aqui en adelante type TDBNavigator = class(DBCtrls.TDBNavigator); procedure TFArticulos.InitButtons; const BtnTypeName: array[TNavigateBtn] of String = ( 'First', 'Prior', 'Next', 'Last', 'Insert', 'Delete', 'Edit', 'Post', 'Cancel', 'Refresh'); var I: TNavigateBtn; begin with TDBNavigator(DBNavigator1)do for I := Low(Buttons) to High(Buttons) do begin Buttons[I].Glyph.LoadFromResourceName( HInstance, Format('CDBN_%s', [BtnTypeName[I]])); Buttons[I].Caption := BtnTypeName[I]; Buttons[I].Layout := blGlyphTop; end; end; procedure TFArticulos.BitBtn1Click(Sender: TObject); begin If (AdoQArticulos.State = dsEdit) or (AdoQArticulos.State = dsInsert) then AdoQArticulos.Post; Close; end; procedure TFArticulos.BitBtn2Click(Sender: TObject); begin Close; end; procedure TFArticulos.FormCreate(Sender: TObject); begin AdoQArticulos.Active := True; DBLookupComboBox2.Enabled:=False; DBLookupComboBox3.Enabled:=False; DBLookupComboBox4.Enabled:=False; combobox1.Clear; end; procedure TFArticulos.ADOQArticulosAfterInsert(DataSet: TDataSet); begin If Cancelar then AdoQArticulos.Cancel else begin DbEdit1.Field.AsString:=Codigo; end; end; procedure TFArticulos.ADOQArticulosBeforeInsert(DataSet: TDataSet); begin tabsheet2.Enabled:=false; tabsheet5.Enabled:=false; Cancelar := true; Tabla := 'A'; FSelCodigo:=TFSelCodigo.Create(self); try FSelCodigo.ShowModal; finally FSelCodigo.Free; end; end; procedure TFArticulos.BitBtn7Click(Sender: TObject); begin if MessageDlg('Esta seguro que desea eliminar esta marca '+ADOartmar2idmarca.AsString+' del artículo '+DBEdit1.Text, mtConfirmation,[mbYes,mbNo],0) = mrYes then begin with AQTemp do begin SQL.Text := 'select idnegocio from negocio where descripcion = ' + QuotedStr(combobox1.Text) ; Active:=true; negocio := Fields[0].asstring; Close; end; AQTemp.SQL.Text := 'Delete From artmarneg where (idneg = '+negocio+ ') AND (idart = '+DBEdit1.Text+') and (idmar= '+ADOartmar2idmarca.asString +')'; AQTemp.ExecSQL; AQTemp.SQL.Text := 'Delete From precios where (idneg = '+negocio+ ') AND (idart = '+DBEdit1.Text+') and (idmarca= '+ADOartmar2idmarca.asString + ') and (periodo is null) and (mes is null) and (anio is null) and (precio is null)'; AQTemp.ExecSQL; ADOartmar2.Requery; ADOartmar2.Active := False; ADOartmar2.Active := True; end; end; procedure TFArticulos.BitBtn3Click(Sender: TObject); begin FAgregaNeg:=TFAgregaNeg.Create(self); //parametros para el form FAgregaNeg.CodParte := ADOQArticulosidarticulo.AsString; FAgregaNeg.Descripcion := ADOQArticulosdescripcion.AsString; try FAgregaNeg.ShowModal; finally FAgregaNeg.Free; end; ADOArtNeg.Requery; ADOArtiNego2.Active := False; ADOArtiNego2.Active := True; end; procedure TFArticulos.BitBtn4Click(Sender: TObject); begin FBuscaArticulo:=TFBuscaArticulo.Create(self); try FBuscaArticulo.ShowModal; finally If FBuscaArticulo.Cod_Parte <> '' then ADOQArticulos.Locate('idarticulo',FBuscaArticulo.Cod_Parte,[]); FBuscaArticulo.Free; end; end; procedure TFArticulos.DBLookupComboBox1Enter(Sender: TObject); begin DBLookupComboBox2.Enabled:=True; end; procedure TFArticulos.DBLookupComboBox2Enter(Sender: TObject); begin DBLookupComboBox3.Enabled:=True; end; procedure TFArticulos.DBLookupComboBox3Enter(Sender: TObject); begin DBLookupComboBox4.Enabled:=True; end; procedure TFArticulos.PageControl1Change(Sender: TObject); begin { if pagecontrol1.ActivePage = tabsheet3 then begin ADOArtiNego2.SQL.Text := ' SELECT n.idnegocio,n.descripcion,n.abrev '+ ' FROM negocio as n, relaprne as z ' + ' where (z.idneg = n.idnegocio) AND z.idart = '+ dbedit1.Text ; ADOArtiNego2.OPEN; end; if pagecontrol1.ActivePage = tabsheet5 then begin combobox1.Clear; AQTempNeg.SQL.Text := ' SELECT distinct n.descripcion '+ ' FROM negocio as n, relaprne as z ' + ' where (z.idneg = n.idnegocio) AND z.idart = '+ dbedit1.Text ; AQTempNeg.Active:=true; if AQTempNeg.IsEmpty then combobox1.Clear else While not AQTempNeg.Eof do begin combobox1.Items.Add(AQTempNeg.Fields[0].Text); AQTempNeg.Next; end; AQTempNeg.Active := False; end; } end; procedure TFArticulos.DBEdit1Change(Sender: TObject); begin If not (AdoQArticulos.State IN [dsInsert,dsEdit]) then begin ADOArtiNego2.SQL.Text := ' SELECT n.idnegocio,n.descripcion,n.abrev '+ ' FROM negocio as n, relaprne as r ' + ' where (r.idneg = n.idnegocio) AND r.idart = '+ dbedit1.Text ; ADOArtiNego2.OPEN; combobox1.Clear; AQTempNeg.SQL.Text := ' SELECT distinct n.descripcion '+ ' FROM negocio as n, relaprne as z ' + ' where (z.idneg = n.idnegocio) AND z.idart = '+ dbedit1.Text ; AQTempNeg.Active:=true; if AQTempNeg.IsEmpty then combobox1.Clear else While not AQTempNeg.Eof do begin combobox1.Items.Add(AQTempNeg.Fields[0].Text); AQTempNeg.Next; end; AQTempNeg.Active := False; end; end; procedure TFArticulos.BitBtn6Click(Sender: TObject); begin if trim(comboBox1.Text) = '' then showmessage('Seleccione un Negocio') else begin with AQTemp do begin SQL.Text := 'select idnegocio from negocio where descripcion = ' + QuotedStr(combobox1.Text) ; Active:=true; negocio := Fields[0].asstring; Close; end; FAgregaMar:=TFAgregaMar.Create(self); //parametros para el form FAgregaMar.CodParte := ADOQArticulosidarticulo.AsString; FAgregaMar.Descripcion := ADOQArticulosdescripcion.AsString; FAgregaMar.negocio := negocio; try FAgregaMar.ShowModal; finally FAgregaMar.Free; end; ADOartmar.Requery; ADOartmar2.Active := False; ADOartmar2.Active := True; end; end; procedure TFArticulos.ADOQArticulosAfterPost(DataSet: TDataSet); begin tabsheet2.Enabled:=true; tabsheet5.Enabled:=true; end; procedure TFArticulos.ComboBox1Change(Sender: TObject); begin with AQTemp do begin SQL.Text := 'select idnegocio from negocio where descripcion = ' + QuotedStr(combobox1.Text) ; Active:=true; negocio := Fields[0].asstring; Close; end; ADOartmar2.SQL.Text := ' SELECT variedad.descripcion,marca.idmarca,marca,cantidad '+ ' FROM (marca inner JOIN variedad ON marca.variedad = variedad.idvariedad) inner join artmarneg on artmarneg.idmar = marca.idmarca and artmarneg.idart = ' + dbedit1.Text+ ' and artmarneg.idneg = ' + negocio ; ADOartmar2.OPEN; end; procedure TFArticulos.BitBtn5Click(Sender: TObject); begin if MessageDlg('Tambien se eliminara las marcas asociadas a este negocio y articulo. Esta seguro que desea eliminar este negocio '+ADOArtiNego2idnegocio.AsString+' del artículo '+DBEdit1.Text, mtConfirmation,[mbYes,mbNo],0) = mrYes then begin AQTemp.SQL.Text := 'Delete From relaprne where (idart = '+DBEdit1.Text+') and (idneg= '+ADOArtiNego2idnegocio.asString +') '; AQTemp.ExecSQL; AQTemp.SQL.Text := 'Delete From artmarneg where (idneg = '+ADOArtiNego2idnegocio.asString +') AND (idart = '+DBEdit1.Text+') '; AQTemp.ExecSQL; AQTemp.SQL.Text := 'Delete From precios where (idneg = '+ADOArtiNego2idnegocio.asString +') AND (idart = '+DBEdit1.Text+') and (periodo is null) and (mes is null) and (anio is null) and (precio is null) '; AQTemp.ExecSQL; ADOArtNeg.Requery; ADOArtiNego2.Active := False; ADOArtiNego2.Active := True; end; end; procedure TFArticulos.FormShow(Sender: TObject); begin { InitButtons(); if FPrincipal.label4.Caption='2' then begin DBNavigator1.VisibleButtons := DBNavigator1.VisibleButtons-[nbInsert,nbDelete,nbPost,nbEdit,nbCancel]; end; } end; end.
Gracias a todos
#12
Escrito 22 marzo 2010 - 01:20
Por lo que veo el problema esta en este código, por lo que lo tienes inhabilitado:
procedure TFArticulos.PageControl1Change(Sender: TObject); begin { if pagecontrol1.ActivePage = tabsheet3 then begin ADOArtiNego2.SQL.Text := ' SELECT n.idnegocio,n.descripcion,n.abrev '+ ' FROM negocio as n, relaprne as z ' + ' where (z.idneg = n.idnegocio) AND z.idart = '+ dbedit1.Text ; ADOArtiNego2.OPEN; end; if pagecontrol1.ActivePage = tabsheet5 then begin combobox1.Clear; AQTempNeg.SQL.Text := ' SELECT distinct n.descripcion '+ ' FROM negocio as n, relaprne as z ' + ' where (z.idneg = n.idnegocio) AND z.idart = '+ dbedit1.Text ; AQTempNeg.Active:=true; if AQTempNeg.IsEmpty then combobox1.Clear else While not AQTempNeg.Eof do begin combobox1.Items.Add(AQTempNeg.Fields[0].Text); AQTempNeg.Next; end; AQTempNeg.Active := False; end; } end;
Yo lo haria asi:
procedure TFArticulos.TabSheet3Show(Sender: TObject); begin ADOArtiNego2.SQL.Text := ' SELECT n.idnegocio,n.descripcion,n.abrev '+ ' FROM negocio as n, relaprne as z ' + ' where (z.idneg = n.idnegocio) AND z.idart = '+ dbedit1.Text ; ADOArtiNego2.OPEN; end; procedure TFArticulos.TabSheet5Show(Sender: TObject); begin combobox1.Clear; AQTempNeg.SQL.Text := ' SELECT distinct n.descripcion '+ ' FROM negocio as n, relaprne as z ' + ' where (z.idneg = n.idnegocio) AND z.idart = '+ dbedit1.Text ; AQTempNeg.Active:=true; if AQTempNeg.IsEmpty then combobox1.Clear else While not AQTempNeg.Eof do begin combobox1.Items.Add(AQTempNeg.Fields[0].Text); AQTempNeg.Next; end; AQTempNeg.Active := False; end; end;
Saludos
#13
Escrito 22 marzo 2010 - 01:33
#14
Escrito 22 marzo 2010 - 03:17
#15
Escrito 23 marzo 2010 - 07:49
despues de revisar codigo etc etc etc...y sacar codigo que habia puesto y etc etc etc
se me ocurrio ver los datos que tenia en mi tabla y habian unas inconsistencias entre los datos
me refiero a las claves foraneas...habian ids que no corrrespondian con las demas tablas...asi que los revise bien y los cambie....pero igualmente nada....
noto un problema con dos dblookcombobox que no muestran la informacion que tengo en mi tabla
los reviso...y sta todo bien.....pruebo de nuevo..y lo mismo ... me parecia raro porq lo demas dblookcombobox que tengo en el mismo formulario muestran la informacion de mi tabla
se me ocurre borrar esos dos dblookcombobox y ponerlos de nuevo y configurarlos de nuevo ...y anda!!!
por lo menos no me sale el error que me salia antes....
ahora con mi dbnavigator recorro mis tres registros sin problemas....llego al ultimo y todo bien...ahora vuelvo para atras y cuando me tiene que mostrar el primer registro me SALE EL ERROR!! ...me fijo los dblookcombobox que traian problemas...y uno muestra el dato que tiene que mostrar y el ultimo esta en blanco ....me resulta raro porq cuando apenas entro al form....los datos me los muestra bien
nose lo que sta pasando....alguien tiene una explicacion "racional"?
#16
Escrito 23 marzo 2010 - 08:08
#17
Escrito 23 marzo 2010 - 08:21
eduardo...el error salia aca
procedure TFPrincipal.Articulos1Click(Sender: TObject); begin [u][i][b] FArticulos:=TFArticulos.Create(self); [/b][/i][/u] try FArticulos.PageControl1.TabIndex:=0; FArticulos.ShowModal; finally FArticulos.Free; end; end;
le comente lo qe habia puesto en el OnCreate y seguia lo mismo
#18
Escrito 23 marzo 2010 - 08:23
#19
Escrito 23 marzo 2010 - 08:25
supongo que tenia que ver con la inconsistencia en la base de datos
o q los dblookupcombobox staban corruptos (??????????????????????)
#20
Escrito 23 marzo 2010 - 02:21