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:
Código Delphi
[-]
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, mant)';
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