Foros Club Delphi

Foros Club Delphi (http://www.clubdelphi.com/foros/index.php)
-   PostgreSQL (http://www.clubdelphi.com/foros/forumdisplay.php?f=42)
-   -   Manejo de arrays en PostgreSQL (http://www.clubdelphi.com/foros/showthread.php?t=91918)

brincola 02-06-2017 18:14:36

Manejo de arrays en PostgreSQL
 
¿Cómo enlazar/(acceder a) un array de datos de una tabla Postgre en una consulta desde Delphi (7 o también XE10 Seattle)?
Gracias.

gatosoft 11-07-2017 23:31:29

Existe la funcion de PostgreSQL array_to_string(Array, texto) que te podria retornar desde el motor una variable texto separada por comas (o por el delimitador que definas... ademas los valores nulos puedes definirlos con un texto especifico)

Tendrias que recibir el valor en delphi como texto (separado por comas) y ya en delphi hacer el "UnSplit"

saludo

brincola 12-07-2017 16:55:16

Cita:

Empezado por gatosoft (Mensaje 519209)
Existe la funcion de PostgreSQL array_to_string(Array, texto) que te podria retornar desde el motor una variable texto separada por comas (o por el delimitador que definas... ademas los valores nulos puedes definirlos con un texto especifico)

Tendrias que recibir el valor en delphi como texto (separado por comas) y ya en delphi hacer el "UnSplit"

saludo

Muchas gracias, gatosoft. Más o menos es lo que parece que hace el pgAdmin III cuando le haces una consulta a la tabla, separado por las típicas comas y encerrados entre las también típicas llaves.
¿Ninguna manera de simplificar la recepción y envío del resultado a través de arrays dinámicos o algo semejante?. Con BLOBs sería complicarse la vida en demasía, quizás.
¿Cómo lo resuelve ZEOS? (Estoy tratando de resolver algunos problemas de conexión a través de ZEOS, de ahí el que lo pregunte en lugar de hacerlo por mí mismo). Supongo que de igual manera, devolviendo un string.

mamcx 12-07-2017 18:09:19

Si mal no entiendo traer el campo array lo devuelve como un string sin nada mas (eso mire en psql). Algunos drivers tienen soporte extendido a los tipos de campos especiales de PG.

brincola 13-07-2017 11:49:45

Cita:

Empezado por mamcx (Mensaje 519240)
Si mal no entiendo traer el campo array lo devuelve como un string sin nada mas (eso mire en psql). Algunos drivers tienen soporte extendido a los tipos de campos especiales de PG.

Gracias, mamcx. Un saludo.

gatosoft 14-07-2017 17:03:06

No es "tan complejo" como utilizar BLOBS, finalmente, si no tienes a la mano un componente que te soporte el tipo de dato, puesde hacer funciones que te ayuden a soportarlo...

Cuando hagas tu consulta SQL utilizas la funcion array_to_string de PG, y para recuperarlo implementas una funcion como:

Código Delphi [-]
//(pesudocodigo)
function getArray(Texto: String): String
var
  sl: TStringList;
begin
  try
  sl := TStringList.Create;  
  sl.Delimiter := ',';
  sl.DelimitedText := Texto;
  Result:= sl.text;
finally
  sl.free;
end;
end;

El anterior codigo te devuelve el texto de un TStringList, puedes recorrelo como un vetor y manipular la info (convertida a texto)

una vez hayas editado tu stringlist, puedes guardarlo mediante SQL utilizando la funcion string_to_array de pg

Código SQL [-]
Update tabla
set campoArray = string_to_array(......:Texto)

en delphi harias algo como:

Código Delphi [-]
//para recuperar la lista
MyLista.Text := getArray(Query.Fieldbyname('CampoArrayConvertidoATexto').AsString);

//editas la lista y la guardas:

Query.SQL.text:= 'Update tabla set campoArray = string_to_array(......:Texto)';
Query.Parambyname('Texto').asString:=MyLista.DelimitedText;

Algo asi mas o menos... No deberia ser un problema.

PgAdmin, hace una traduccion similar en su GUI para que puedas visualizar el dato como texto... pero eso no quiere decir que el tipo de dato sea precisamente texto.

Saludo,

brincola 15-07-2017 18:03:03

Muy interesante, gatosoft. Se agradecen las ideas. No conocía las funciones de PG string_to_array y array_to_string. Las buscaré y les daré un vistazo.
En stackoverflow también se encuentran algunas consultas relacionadas con posibles formas de operar con este tema.
Lo que es una lástima es que no hayan soluciones más directas por parte de Delphi, pero al fin y al cabo, lo que a veces pedimos es lo mismo que tenemos que hacer nosotros mismos, como indicas tú, gatosoft.

Reitero las gracias. Un saludo.

mamcx 15-07-2017 19:27:01

Eso no es un problema de Delphi sino de drivers. Debes buscar drivers que tengan soporte completo del motor.

Cuando he necesitado he usado DevArt antes, y tienen drivers para PG + Delphi:

https://www.devart.com/dbx/postgresql/

No deben ser los unicos.

brincola 16-07-2017 13:28:54

Gracias, mamcx. Le echaré un vistazo.
Un saludo.


La franja horaria es GMT +2. Ahora son las 15:27:06.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi