Ir al contenido



Foto

Valores textos se guardan como ????tE? al hacer insert masivos con FireDAC

FireDAC Firebird

  • Por favor identifícate para responder
2 respuestas en este tema

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.398 mensajes
  • LocationRepública Dominicana

Escrito 11 mayo 2018 - 12:58

Pues eso mis estimados, en un proyecto que tengo anteriormente guardaba una cantidad de información insertandolo uno a uno y eso hace que la aplicación se alente un poco en determinado momentos, luego he decubierto una funcionalidad en FIreDAC que facilita realizar insert masivos de un sólo golpe, esto es lo que tengo:


delphi
  1. procedure TOrdenTrabajoP.InsertOTServicios(const ADetalles: TList<TServiciosDetRec>; AListChecked: TListView; AIndex: Integer; ADataSet,ADataSetDel: TFDQuery; AUser,ADevice: String; isNew: Boolean = False);
  2. var i: Integer;
  3. begin
  4.  
  5. if not isNew then EliminaServicios(ADataSetDel,AIndex,AUser,ADevice);
  6.  
  7. ADataSet.Params.ArraySize := ADetalles.Count;
  8.  
  9. for i := 0 to ADataSet.Params.ArraySize -1 do begin
  10.  
  11. ADataSet.ParamByName('id').AsIntegers[i] := AIndex;
  12. ADataSet.ParamByName('nombre').AsStrings[i] := ADetalles.Items[i].SNombre;
  13. ADataSet.ParamByName('serv').AsIntegers[i] := ADetalles.Items[i].SCodigo;
  14. ADataSet.ParamByName('check').AsIntegers[i] := AListChecked.Items[ADetalles.IndexOf(ADetalles.Items[i])].Checked.ToInteger;
  15.  
  16. end;
  17.  
  18. ADataSet.Execute(ADataSet.Params.ArraySize);
  19.  
  20. end;
  21.  

Pero me he encontrado con un inconveniente y es que los textos e guardan como "?????Et?" y así por el estilo, de la forma clásica de ejecutar un insert por cada registro no sucedía, pero en este caso sí, ¿alguno de ustedes se han enfrentado con esta situación?.

 

Saludos


  • 0

#2 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.398 mensajes
  • LocationRepública Dominicana

Escrito 14 mayo 2018 - 07:39

A nadie le ha sucedido algo similar? :cry:


  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.398 mensajes
  • LocationRepública Dominicana

Escrito 14 mayo 2018 - 09:02

Me han proporcionado la solución es StackOverflow, y es una tontería, al parecer es asunto de UniCode, en vez de usar ftString y AsStrings[i] hay que usar ftWideString y AsWideStrings[], lo que no me explico es que cuando insertas los datos uno a uno (la manera clásica y lenta) los tipos de datos ftString y AsString funciona correctamente y no cuando se utiliza los Array DML de FireDAC.


  • 0





Etiquetado también con una o más de estas palabras: FireDAC, Firebird