Cita:
Empezado por magnu9
Código Delphi [-]Procedure TmtLocalidad.SpeedButton1Click(Sender: TObject);
begin
querArticulo.close;
querArticulo.SQL.Text:='SELECT localidad.codloc FROM articulo CROSS JOIN localidad WHERE (localidad.codloc = '''+dbcodigo.Field.Text+''' and articulo.codloc = '''+dbcodigo.Field.Text+''')';
querArticulo.Open;
if querArticulo.Fields[0].AsInteger <> 0 then
showmessage('Esta Localidad Tiene Articulos Asignados')
else
if dbCodigo.text = '' then
MessageDlg('No existe localidad para borrar', mtInformation,[mbCancel], 0,)
else if MessageDlg('¿ Seguro que desea borrar la localidad' + dbCodigo.Text + ' ?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
querLocalidad.Delete;
btnNuevo.Enabled:=true;
btnGuardar.Enabled:=false;
end;
|
Depende de la BD que estés usando.
A eso que quieres hacer se le llama integridad referencial.
En los RDBMS (Firebird,Interbase,SQL Server, etc) se puede especificar eso desde la BD y no tendrias problemas, pero si lo haces con Paradox.......no se si definiendo un Indice secundario (no creo, pero no recuerdo, hacer mucho no uso paradox).
pero algunas correcciones o recomendaciones:
*Renombra las tablas para que no pongas el nombre completo cada vez que hagas referencia a ellas.
*Cuando quieras un string entrecomillado usa la funcion QuotedStr(); para que evites poner decenas de '
Código Delphi
[-]
querArticulo.SQL.Text:='SELECT codloc FROM articulo a CROSS JOIN localidad l WHERE (l.codloc = '+QuotedStr(dbcodigo.Field.Text)+' and a.codloc = '+QuotedStr(dbcodigo.Field.Text)+')';
*No uses AsInteger=0 para comprobar que no hay datos. cuando el resultado es NULL, al menos en interbase y firebird te lanza un error. puedes usar:
Código Delphi
[-]
querArticulo.Fields[0].IsEmpty;
*La validacion del Edit hazla al iniciar el procedimiento
Código Delphi
[-]
Procedure TmtLocalidad.SpeedButton1Click(Sender: TObject);
if dbCodigo.text = '' then
begin
MessageDlg('No existe localidad para borrar', mtInformation,[mbCancel], 0,);
Exit;
end;
etc......
Así evitas hacer un Query que no se necesitaba.
Bueno..... creo que para mi es todo