Jump to content


Photo

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

FireDAC Firebird

  • Please log in to reply
2 replies to this topic

#1 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 11 May 2018 - 12:58 PM

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
  • 7419 posts
  • LocationRepública Dominicana

Posted 14 May 2018 - 07:39 AM

A nadie le ha sucedido algo similar? :cry:


  • 0

#3 enecumene

enecumene

    Webmaster

  • Administrador
  • 7419 posts
  • LocationRepública Dominicana

Posted 14 May 2018 - 09:02 AM

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





Also tagged with one or more of these keywords: FireDAC, Firebird

IP.Board spam blocked by CleanTalk.