Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-06-2017
brincola brincola is offline
Miembro
 
Registrado: feb 2011
Posts: 27
Poder: 0
brincola Va por buen camino
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.
Responder Con Cita
  #2  
Antiguo 12-07-2017
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bucaramanga, Colombia
Posts: 686
Poder: 15
gatosoft Va por buen camino
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
__________________
gatosoft [M.40.co]
Responder Con Cita
  #3  
Antiguo 12-07-2017
brincola brincola is offline
Miembro
 
Registrado: feb 2011
Posts: 27
Poder: 0
brincola Va por buen camino
Cita:
Empezado por gatosoft Ver Mensaje
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.
Responder Con Cita
  #4  
Antiguo 12-07-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.421
Poder: 18
mamcx Va camino a la famamamcx Va camino a la fama
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.
__________________
Nuevo Blog.
Ahora en Twitter!.
Responder Con Cita
  #5  
Antiguo 13-07-2017
brincola brincola is offline
Miembro
 
Registrado: feb 2011
Posts: 27
Poder: 0
brincola Va por buen camino
Cita:
Empezado por mamcx Ver Mensaje
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.
Responder Con Cita
  #6  
Antiguo 14-07-2017
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bucaramanga, Colombia
Posts: 686
Poder: 15
gatosoft Va por buen camino
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,
__________________
gatosoft [M.40.co]
Responder Con Cita
  #7  
Antiguo 15-07-2017
brincola brincola is offline
Miembro
 
Registrado: feb 2011
Posts: 27
Poder: 0
brincola Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 15-07-2017
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.421
Poder: 18
mamcx Va camino a la famamamcx Va camino a la fama
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.
__________________
Nuevo Blog.
Ahora en Twitter!.
Responder Con Cita
  #9  
Antiguo 16-07-2017
brincola brincola is offline
Miembro
 
Registrado: feb 2011
Posts: 27
Poder: 0
brincola Va por buen camino
Gracias, mamcx. Le echaré un vistazo.
Un saludo.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Duda arrays M4714S Varios 4 20-06-2011 23:25:31
Multidimensional arrays nemesis JAVA 1 12-10-2008 02:07:42
manejo de arbol de contenidos y manejo se sonido y video Buelos Internet 4 09-07-2007 15:52:45
ordenacion arrays halizia PHP 7 07-02-2007 11:47:03
arrays nenufer Varios 7 13-05-2006 22:44:51


La franja horaria es GMT +2. Ahora son las 16:11:54.


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