Cita:
AzidRain
En FB supongo que el generador hace lo mismo que el campo autoincrementado, ahí los expertos nos dirán
|
En realidad si hace lo mismo. Estamos hablando de sql standart aquí dejo este enlace
http://es.wikipedia.org/wiki/Firebird. Tambien veo que utilizas Transacciones, lo mismo realice lo unico que para obtener el id generado desde el servidor utilizo un ClientDataSet con los eventos puesto anteriomente. y luego utilizando este modelo en transacciones.
Código SQL
[-]
procedure TfrmPrincipal.btnAgregaAgendaClick(Sender: TObject);
var
ExitoAgenda :Boolean;
begin
HoraA := dtpHora.Time;
idAgenda := dmLogicaNegocio.cdsAgendaID_AGENDA.AsInteger; //Aqui es donde obtengo ya mi id que proviene del Generador del servidor llamado: AGENDAID_AGENDA
TrnAgenda := dmConecta.FBLINUXCONECTION.BeginTransaction;
try
//// Instrucciones para guardar los datos En la Agenda
with dmConecta.qAgenda do
begin
sql.Clear;
sql.Add('Insert into Agenda (ID_AGENDA, ID_EMPLEADO, FECHA, ESTADO)');
sql.Add(' Values (
IdAgenda,
idEmpleado,
fecha,
Estado)');
ParamByName('pidAgenda').asInteger := idAgenda;
ParamByName('pidEmpleado').AsInteger := StrToInt(dbeidEmpleado.Text);
ParamByName('pFecha').AsDate := monthCalendar1.Date;
ParamByNAme('pEstado').AsString := '1';
ExecSQL;
end;
with dmConecta.qRecordatorio do
begin
Close;
SQL.Clear;
SQL.Add('Insert into RECORDATORIOS (ID_AGENDA, TITULO, MENSAJE, HORA)');
SQL.Add('Values (:idAgenda, :Titulo, :Mensaje, :Hora)');
idAgenda := dmLogicaNegocio.cdsAgendaID_AGENDA.asInteger;//dmConecta.qAgendaID_agenda.AsInteger;//(GEN_AGENDA_ID);
ParamByName('idAgenda').AsInteger := idAgenda;
ParamByName('Titulo').AsString := eTitulo.Text;
ParamByName('Mensaje').AsString := mDetalle.Text;
ParamByName('Hora').AsTime := HoraA;
ExecSQL;
begin
dmConecta.FBLINUXCONECTION.CommitFreeAndNil(TrnAgenda);
ExitoAgenda := True;
end;
end;
Except
on E: Exception do
begin
dmConecta.FBLINUXCONECTION.RollbackFreeAndNil(TrnAgenda);
ShowMessage('Error Encontrado'+ e.Message);
end;
end;
if ExitoAgenda = True then
begin
ShowMessage('Recordatorio Ingresado'+ 'Su Numero de Agenda es:' + dbeTomaConsecutivo.Text);
dmConecta.qAgenda.Close;
dmConecta.qRecordatorio.Close;
dmLogicaNegocio.cdsAgenda.Close;
MonthCalendar1.Date := Now;
eTitulo.Text := '';
mDetalle.Text :='';
frmPrincipal.GroupBox1.Height := 178;
end;
end;
Trato de que mi ClientDataSet se abra para obtener mi id en el evento OnEnter pero si utiliza el usuario la tecla Tab no se abre... aun estoy viendo como hago eso...
Gracias chicos
Saludos