Hola.
Creo que tenes un problema de concepto. Las variables "objeto" en delphi no son mas que apuntadores, con una sintaxis simplificada. De esta cuenta, que en tu procedimiento DevuelveClienteOpcional, al hacer
Result := QsqlSistema;
Lo que estas haciendo realmente es devolver una referencia a QsqlSistema, y por tanto, al asignar esta referencia a QsqlClienteOpcional y luego destruir el objeto, en realidad estas destruyendo QsqlSistema, puesto que ambos apuntan al mismo objeto.
Si lo que queres es tener un objeto totalmente independiente, has de crearlo dentro del primer procedimiento, que debiera quedar algo como:
Código Delphi
[-]
function TSistema.DevuelveClienteOpcional(pCita: String): TAdoQuery;
begin
result := TAdoQuery.Create; with result do
begin
Close;
Parameters.Clear;
Parameters.AddParameter.Name:='Cita';
Parameters.ParamByName('Cita').Value:=pCita;
SQL.Text:= 'Select * from CitaOpcional'+
' Where IdCita= :Cita';
ParamCheck:= True;
Open;
end;
end;
La otra rutina no necesitaría, en este caso, ningún cambio.
No uso ado, asi que he dejado simplemente algunos comentarios que supongo vos sabras interpretar y sustituir por el código apropiado.
Hasta luego.
