Ver Mensaje Individual
  #3  
Antiguo 05-07-2007
gabrielkc gabrielkc is offline
Miembro
 
Registrado: jun 2007
Ubicación: Chihuahua Mexico
Posts: 118
Reputación: 17
gabrielkc Va por buen camino
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

Última edición por gabrielkc fecha: 05-07-2007 a las 00:16:27.
Responder Con Cita