PDA

Ver la Versión Completa : ayuda comprobando campos


jonydread
16-05-2014, 05:50:50
Estimados tengo un problemilla con este codigo al comprobar campos, necesito comprobar primero si estan vacio campos y luego que si registro ya existe en listado, el problema que tengo es que al recorrer listview esta cuando esta vacia no hace nada pero si tiene registro funciona agregando registro pero no cancela al ya existir. agrego codigo
procedure TForm2.BitBtn11Click(Sender: TObject);
var
cItem: TListItem;
id,man: string;
i: integer;
begin
for i := 0 to Listview5.Items.Count -1 do
begin
if (dblookupcombobox1.KeyValue = NULL) or (edit11.Text='') or (edit12.Text='') then
MessageDlg('complete campos', mtWarning, [mbOk],0)
else
if Listview5.Items[i].Caption = dblookupcombobox1.KeyValue then
MessageDlg('ya existe elemento', mtWarning, [mbOk],0) else
begin
man:= uman.Text;
Zquery1.sql.text := 'insert into MP values (:area,:id,:elemento,:frecuencia,:tipo,:umant,:pmant)';
ZQuery1.ParamByName('area').AsString := label8.Caption;
ZQuery1.ParamByName('id').AsString := dblookupcombobox1.KeyValue;
ZQuery1.ParamByName('elemento').AsString := dblookupcombobox1.Text;
ZQuery1.ParamByName('frecuencia').AsString := edit11.Text;
ZQuery1.ParamByName('tipo').AsString := edit12.Text;
ZQuery1.ParamByName('umant').AsString := man;
ZQuery1.ParamByName('pmant').AsDate := Datetimepicker4.Date;
ZQuery1.ExecSQL;
zQuery1.SQL.Clear;
Zquery1.Close;
Listview5.Clear;
Zquery1.SQL.Text := 'SELECT * From MP where area = :area';
zQuery1.ParamByName('area').AsString:= label8.Caption;
zquery1.Open;
while not zquery1.Eof do
begin
cItem := Listview5.Items.Add;
cItem.Caption := zQuery1.fieldbyname('id').AsString;
cItem.SubItems.Add(zQuery1.fieldbyname('elemento').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('frecuencia').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('tipo').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('umant').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('pmant').AsString);
zquery1.next;
end;
edit11.Clear;edit12.Clear;
uman.Clear;
uman.Add('no registra');
Datetimepicker3.Format:= ' ';
end;
end;
end;


gracias!

jonydread
03-06-2014, 03:56:45
me pueden ayudar porfavor tengo esto pero me aparece un error de access violation
procedure TForm2.BitBtn11Click(Sender: TObject);
var
cItem: TListItem;
id,man: string;
i: integer;
begin
if (dblookupcombobox1.KeyValue = NULL) or (edit11.Text='') or (edit12.Text='') then
begin
MessageDlg('complete campos', mtWarning, [mbOk],0);
Abort;
end
else
if ListView5.Items.Count > 0 then
for i:= 0 to Listview5.Items.Count -1 do
begin
if Pos('cadena', Listview5.Items[i].Caption) <> 0 then
begin
MessageDlg('ya existe elemento', mtWarning, [mbCancel],0);
Abort;
end else
begin
man:= uman.Text;
Zquery1.sql.text := 'insert into MP values (:area,:id,:elemento,:frecuencia,:tipo,:umant,:pmant)';
ZQuery1.ParamByName('area').AsString := label8.Caption;
ZQuery1.ParamByName('id').AsString := dblookupcombobox1.KeyValue;
ZQuery1.ParamByName('elemento').AsString := dblookupcombobox1.Text;
ZQuery1.ParamByName('frecuencia').AsString := edit11.Text;
ZQuery1.ParamByName('tipo').AsString := edit12.Text;
ZQuery1.ParamByName('umant').AsString := man;
ZQuery1.ParamByName('pmant').AsDate := Datetimepicker4.Date;
ZQuery1.ExecSQL;
zQuery1.SQL.Clear;
Zquery1.Close;
Listview5.Clear;
end end else
begin
man:= uman.Text;
Zquery1.sql.text := 'insert into MP values (:area,:id,:elemento,:frecuencia,:tipo,:umant,:pmant)';
ZQuery1.ParamByName('area').AsString := label8.Caption;
ZQuery1.ParamByName('id').AsString := dblookupcombobox1.KeyValue;
ZQuery1.ParamByName('elemento').AsString := dblookupcombobox1.Text;
ZQuery1.ParamByName('frecuencia').AsString := edit11.Text;
ZQuery1.ParamByName('tipo').AsString := edit12.Text;
ZQuery1.ParamByName('umant').AsString := man;
ZQuery1.ParamByName('pmant').AsDate := Datetimepicker4.Date;
ZQuery1.ExecSQL;
zQuery1.SQL.Clear;
Zquery1.Close;
Listview5.Clear;
end;

Zquery1.SQL.Text := 'SELECT * From MP where area = :area';
zQuery1.ParamByName('area').AsString:= label8.Caption;
zquery1.Open;
while not zquery1.Eof do
begin
cItem := Listview5.Items.Add;
cItem.Caption := zQuery1.fieldbyname('id').AsString;
cItem.SubItems.Add(zQuery1.fieldbyname('elemento').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('frecuencia').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('tipo').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('umant').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('pmant').AsString);
zquery1.next;
end;
edit11.Clear;edit12.Clear;
uman.Clear;
uman.Add('no registra');
Datetimepicker3.Format:= ' ';
end;

ecfisa
03-06-2014, 06:12:26
Hola jonydread.

Sinceramente habría sido de mucha utilidad que hubieras explicado con palabras que deseabas que hiciera la rutina.

Es difícil interpretar correctamente el código si no se sabe cuál es su finalidad, sin contar que se ignora el tipo y cometido de de los componentes y debido a todo eso, por que se lanza la excepción.

De todas formas veo que llevas dos semanas con esto, así que de acuerdo a lo que entendí, yo trataría de clarificar un poco encapsulando algunas acciones:

function TForm1.ExistsInCaption(aCaption: TCaption): Boolean;
var
i: Integer;
begin
Result:= False;
for i:= 0 to ListView5.Items.Count-1 do
if Pos(aCaption, ListView5.Items[i].Caption) <> 0 then
begin
Result:= True;
Exit;
end;
end;

procedure TForm1.Insertar;
begin
zquery1.sql.text:= 'insert into MP values(:id, :area, :elemento, :frecuencia, :tipo, :umant, :pmant)';
zQuery1.ParamByName('id').AsString:= dblookupcombobox1.KeyValue;
zQuery1.ParamByName('area').AsString:= label8.Caption;
zQuery1.ParamByName('elemento').AsString:= dblookupcombobox1.Text;
zQuery1.ParamByName('frecuencia').AsString:= edit11.Text;
zQuery1.ParamByName('tipo').AsString:= edit12.Text;
zQuery1.ParamByName('umant').AsString:= uman.Text;
zQuery1.ParamByName('pmant').AsDate:= Datetimepicker4.Date;
zQuery1.ExecSQL;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
cItem: TListItem;
begin
if (dblookupcombobox1.KeyValue = NULL) or (edit11.Text='') or (edit12.Text='') then
begin
MessageDlg('complete campos', mtWarning, [mbOk],0);
Exit;
end;

if not ExistsInCaption('cadena') then
Insertar
else
begin
MessageDlg('ya existe elemento', mtWarning, [mbCancel], 0);
Exit;
end;

zquery1.SQL.Text := 'SELECT * From MP where area = :area';
zQuery1.ParamByName('area').AsString:= label8.Caption;
zquery1.Open;
while not zquery1.Eof do
begin
cItem := Listview5.Items.Add;
cItem.Caption:= zQuery1.fieldbyname('id').AsString;
cItem.SubItems.Add(zQuery1.fieldbyname('elemento').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('frecuencia').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('tipo').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('umant').AsString);
cItem.SubItems.Add(zQuery1.fieldbyname('pmant').AsString);
zquery1.next;
end;
edit11.Clear;edit12.Clear;
uman.Clear;
uman.Lines.Add('no registra');
Datetimepicker3.Format:= ' ';
end;

Te aclaro que sólo pretendo darte una pauta, no probé el código e ignoro si funciona tál como esta, pero espero que te sirva como punto de partida para encontrar la solución.

Saludos :)

jonydread
05-06-2014, 05:58:44
Exelente muchas gracias ya me daba por vencido.v:-)v


Saludos!