Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-04-2017
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 90
Poder: 9
usuario1000 Va por buen camino
Pasar Array como Parametro

Holal a todos.

Tengo un problemilla que he intentado resolver y no hay manera. Expongo lo que me ocurre:
Sigo desarrollando mi aplicación Cliente - Servidor, y ahora me toca enviar los datos del cliente al servidor para que los grabe en la tabla correspondiente.
El problema que se me plantea es que cuando llamo a la funcion que he creado previamente en el servidor e intento pasarle los datos, estos son muchos, exactamente 45 parametros y me da error, porque superan los 32 que existe como máximo en cuanto a pasar parametros se refiere.
La solucion que intento dar es crear un Array de String con 45 posiciones y pasar el Array como único parámetro a através de la función, pero me da errores de incompatibilidad de datos.

He leido algo por el foro de crear el array dentro de un Type, pero no me aclaro, por si alguien me lo puede explicar de manera sencilla y clara con un ejemplo. Lo que tengo ahora mismo es esto.
Código Delphi [-]
Function GrabarDatos:Boolean;
var
    funcion:Tservermethods1client;

    tabla: Array of String;
begin

     funcion := Tservermethods1client.Create
             (FModuloDatos.SQLConnection.DBXConnection);

    SetLength(tabla,45);
    tabla[0] := Edit1.text;  
    tabla[1] := Edit2.text;
    ....
    Tabla[45]:= edit45.text;

     resultado:= funcion.GragarEnServidorDatos(Tabla); 

end;
Así no me funciona, pero no se como arreglarlo para enviar los datos al servidor.

Agradezco un poco de luz, gracias a todos.

nota: Delphi 10 Seattle.

Última edición por ecfisa fecha: 21-04-2017 a las 22:19:47. Razón: Etiquetas [delphi][/delphi]
Responder Con Cita
  #2  
Antiguo 21-04-2017
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 15
Caminante Va camino a la fama
Hola

Para declarar un tipo de dato que sea un array puedes hacer:

Código Delphi [-]
Type

MiArray=Array[1..45]of string;

Y para usarlo

Código Delphi [-]
var
 UnaVariable:MiArray;

Saludos
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #3  
Antiguo 21-04-2017
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 90
Poder: 9
usuario1000 Va por buen camino
Cita:
Empezado por Caminante Ver Mensaje
Hola

Para declarar un tipo de dato que sea un array puedes hacer:

Código Delphi [-]Type MiArray=Array[1..45]of string;


Y para usarlo

Código Delphi [-]var UnaVariable:MiArray;


Saludos

Gracias Caminante por responder tan rápido, pero si hago eso al compilar me da el siguiente error:
E2010 Incompatible types: 'string' and 'MiArray'

En la funcion:
resultado:= funcion.GrabarEnServidorDatos(Tabla);
Responder Con Cita
  #4  
Antiguo 21-04-2017
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 15
Caminante Va camino a la fama
Y de que tipo es Tabla.
En ese caso debes usar el mismo tipo de dato que estas creando.
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #5  
Antiguo 21-04-2017
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 90
Poder: 9
usuario1000 Va por buen camino
Cita:
Empezado por Caminante Ver Mensaje
Y de que tipo es Tabla.
En ese caso debe ser del mismo tipo que estas creando.
Tabla está definido como:

tabla:MiArray;
Responder Con Cita
  #6  
Antiguo 21-04-2017
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 15
Caminante Va camino a la fama
Pues se me hace raro
Podrias poner un poco mas de codigo?
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #7  
Antiguo 21-04-2017
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 90
Poder: 9
usuario1000 Va por buen camino
Cita:
Empezado por Caminante Ver Mensaje
Pues se me hace raro
Podrias poner un poco mas de codigo?
He avanzado un poquito.
Lo que tengo ahora mismo es:
Código Delphi [-]
 
type
  TMiRegistro = record
       TablaDatos : array [0..45]  of String;
  end;
...
function TFRecibidas.grabarFactura:Boolean;
var
  tabla : TMiRegistro;
begin

  funcion := Tservermethods1client.Create
    (FModuloDatos.SQLConnection.DBXConnection);

        tabla.TablaDatos[0]:= eDocumento.Text;
        tabla.TablaDatos[1]:= eAno.Text;
        tabla.TablaDatos[2]:= eEmp.Text;
         ...

  resultado := funcion.GrabarFactura(tabla.TablaDatos[0]);   // Así sí lo compila, pero no me deja pasar la tabla completa me da error

end;

Código Delphi [-]
 [dcc32 Error] FacturasRecibidas.pas(1639): E2010 Incompatible types: 'string' and 'TMiRegistro'
Responder Con Cita
  #8  
Antiguo 21-04-2017
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 90
Poder: 9
usuario1000 Va por buen camino
Código Delphi [-]
resultado := funcion.GrabarFactura(tabla);  // Esto es lo que pretendo pasar, la tabla completa, Pero da el error antes dicho.
Responder Con Cita
  #9  
Antiguo 21-04-2017
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 15
Caminante Va camino a la fama
En el metodo grabarfactura pareciera que el parametro que le pasas esta esperando un string y no un Array.

Es la unica explicacion que le veo.

Como esta declarado este metodo???
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #10  
Antiguo 21-04-2017
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 90
Poder: 9
usuario1000 Va por buen camino
El metodo declarado en el servidor al que llamo desde el cliente está declarado de la siguiente forma:
Código Delphi [-]
function GrabarFactura (tabla:array of string):boolean;
Responder Con Cita
  #11  
Antiguo 21-04-2017
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 15
Caminante Va camino a la fama
Tambien debe ser de tipo MiArray sino se interpreta como un tipo diferente.
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #12  
Antiguo 21-04-2017
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 90
Poder: 9
usuario1000 Va por buen camino
Cita:
Empezado por Caminante Ver Mensaje
Tambien debe ser de tipo MiArray sino se interpreta como un tipo diferente.
Ok, lo voy a cambiar y te comento lo que me sale.
Responder Con Cita
  #13  
Antiguo 21-04-2017
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 90
Poder: 9
usuario1000 Va por buen camino
Cita:
Empezado por usuario1000 Ver Mensaje
Ok, lo voy a cambiar y te comento lo que me sale.
He declarado lo mismo que en el Cliente, pero ahora la funcion GrabarFactura no la reconoce en el CLIENTE
Responder Con Cita
  #14  
Antiguo 21-04-2017
Avatar de Caminante
Caminante Caminante is offline
Miembro
 
Registrado: oct 2010
Ubicación: Lima - Peru
Posts: 338
Poder: 15
Caminante Va camino a la fama
Bueno ahi no sabria decirte, nunca he usado datasnap. Pero en una aplicacion ordinaria deberia funcionar.

Voy a ver si investigo algo sobre el tema.
__________________
Caminante, son tus huellas el camino y nada más; Caminante, no hay camino, se hace camino al andar.
Antonio Machado
Responder Con Cita
  #15  
Antiguo 21-04-2017
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 90
Poder: 9
usuario1000 Va por buen camino
Cita:
Empezado por Caminante Ver Mensaje
Bueno ahi no sabria decirte, nunca he usado datasnap. Pero en una aplicacion ordinaria deberia funcionar.

Voy a ver si investigo algo sobre el tema.

ok, voy a ver si doy mientras con la solución
Responder Con Cita
  #16  
Antiguo 29-04-2017
Avatar de Soa Pelaez
Soa Pelaez Soa Pelaez is offline
Miembro
 
Registrado: nov 2015
Posts: 133
Poder: 9
Soa Pelaez Va por buen camino
Podes hacerlo de esta manera.

Código Delphi [-]
//Tabla --> Es el clientdataset que envia la información al servidor
function EnviaInfoCDS(Tabla: TClientDataSet): OleVariant;
var
 Info: OleVariant;
 i: Integer;
begin
  Info:= VarArrayCreate([0, Tabla.FieldCount], varVariant);
  for i := 0 to Tabla.FieldCount -1 do
     Info[i] := Tabla.Fields[i].Value;
  Result:= Info;
end;

Y el result lo envias dentro de la función que tienes en el servidor, la variable que lo recibe debe ser de este tipo y ya asi te sirve.

En el servidor haces lo contrario a esta función para recibir el contenido de la variable me explico.
Ambos clientdataset deben tener la misma cantidad de campos.

Código Delphi [-]
procedure RecibeInfoCDS(Info: OleVariant);
begin
  //Tabla --> Es el clientdataset que recibe la información que envia el cliente.
  for i := 0 to Tabla.FieldCount -1 do
     Tabla.Fields[i].Value:= Info[i];
end;

Última edición por Soa Pelaez fecha: 29-04-2017 a las 00:17:21.
Responder Con Cita
  #17  
Antiguo 29-04-2017
usuario1000 usuario1000 is offline
Miembro
 
Registrado: nov 2016
Posts: 90
Poder: 9
usuario1000 Va por buen camino
Muchas gracias, Soa Pelaez, lo pondré en práctica, puesto que he tenido que ingeniarmelas para hacerlo de otra manera menos ortodoxa. .

En cuanto me salga la ocasión, que me saldrá, la pongo en práctica.

Muy agradecido.
Responder Con Cita
Respuesta



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
Pasar un array como parámetro a una Query pape19 Varios 7 10-10-2011 23:53:40
Pasar array como parámetro santiago14 Varios 10 17-09-2008 15:31:00
Como pasar un parametro? b3nshi Varios 3 18-08-2007 07:54:53
PLSQL - Pasar un array como parametro. movorack SQL 1 06-03-2007 21:07:59
pasar como parámetro un array bidimensional nsr048 Varios 2 08-11-2005 12:54:20


La franja horaria es GMT +2. Ahora son las 20:05:12.


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