Ver Mensaje Individual
  #16  
Antiguo 17-12-2008
javi.donvito javi.donvito is offline
Registrado
 
Registrado: may 2005
Posts: 6
Reputación: 0
javi.donvito Va por buen camino
Ha llegado el momento de explicaros de donde me venia el problema. Me he pasado días y días mirando por Internet, “rastreando” las causas del error y cada vez que modificaba el código del programa la pesadilla continuaba, yo creía que el problema venia en que estaba pasando mal los parámetros en la fecha o alguna historia de este tipo (eso me pasa por obcecarme en la misma idea)

La pista me la dió uno de los errores que me generaba
Microsoft SQL Server Driver. Caracteristica opcional no implementada

El tema es que originalmente la aplicación del cliente fue desarrollada en VB6 y utiliza como bases de datos Microsoft SQL Server 2000. Habia que hacer unas modificaciones y he usado Delphi 7. Los errores me los daba tanto en Windows XP como en Vista.

La Solución:

http://support.microsoft.com/kb/294160/es

Personalmente para resolver el problema del paso de las fechas por parámetro, he tenido que modificar la cadena de conexión ADO y también el código de la aplicación para que me fuera aceptada la fecha cuando se realiza la modificación del registro.

La cadena de conexión que usaba en la propiedad ConectionString del componente ADOConection era la siguiente:

Provider=MSDASQL.1;Password=password;Persist Security Info=True;User ID=nombre_usuario;Data Source=sqllaco;Mode=ReadWrite;Extended Properties="DSN=midsn;UID=sa;PWD=laco;APP=Enterprise;WSID=JAVIER_LOCAL;DATABASE=RECIBOS";Initial Catalog=RECIBOS

Y ahora es:

Provider=SQLOLEDB.1;Password=password;User ID=nombre_usuario;Data Source=sqllaco;Mode=ReadWrite;Extended Properties="DSN=midsn;UID=sa;PWD=laco;APP=Enterprise;WSID=JAVIER_LOCAL;DATABASE=RECIBOS";Initial Catalog=RECIBOS

La parte Persist Security Info=True, que aparece en la antigua configuración, en la nueva, se suprime (no recuerdo exactamente en que pagina encontré este dato, creo que en la misma web del enlace)

Y el código de programa para que esto funcione es el siguiente:

Código Delphi [-]
 procedure TForm1.Button1Click(Sender: TObject);
Var
  FechaActual : TDateTime;
begin
  FechaActual :=now;
  with ADOQuery1 do
  begin
    Close;
    SQL.Clear;
    SQL.Text:='Update CuotasEmitidas SET ImpRecibo = 21.02, FecSituacion= :MiFecha ' +
    ' WHERE (CuotasEmitidas.CodPers = 462 AND CuotasEmitidas.NumRecibo = 1)';
//---------------------------------------------
//  Si añado este bloque me genera error    
(*   with Parameters.AddParameter do
    begin
      DataType:=ftDate;
      Name :='MiFecha';
      Direction:=pdInput;
    end;*) 
// ------------------------------
Parameters.ParamByName('MiFecha').Value:=StrToDate(FormatDateTime('dd/mm/yyyy',fechaActual));
    Prepared:=True;
    if prepared then
       ExecSQL;
  end;

Si añado el bloque de código que lo tengo como comentario, me genera el error:

Multiple Step OLE DB operation generated errors. Check each OLE DB status value, if avalaible. No work was done.

Y en al ADOQuery1 no tengo ningún parámetro creado !

Bueno, pues aqui dejo esto por si alguien le puede servir de ayuda.
Saludos

Responder Con Cita