Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Tema Cerrado
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 10-03-2010
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
Thumbs up Existe alguna tecnica para no repetir codigo?

Hola a todos!, hace rato que no escribia...
Les explico mi problema para que se entienda lo que quiero hacer, si se puede...

Tengo dos bases de datos. Las dos son iguales en estructura, solo qeu guardan datos distintos (una guarda datos personales y las otras los datos de las sucursales)
Por ende tengo dos datamodulos, donde se repiten las querys.
Ahora supongamos que tengo un formulario donde se hacen busquedas. Hoy en dia tengo un codigo de la siguiente forma:

Código Delphi [-]
if esBaseMia then {se busca en la base de mis datos}
   begin
       with datamodule1 do
       begin
           unaQuery.Parameters.ParamByName('parametro1').Value:=unValor;
           unaQuery.Parameters.ParamByName('parametro2').Value:=unValor;
           unaQuery.Parameters.ParamByName('parametro3').Value:=unValor;
       end
   end
else {se busca en la base de las sucursales}
        with datamodule2 do
        begin 
           unaQuery.Parameters.ParamByName('parametro1').Value:=unValor;
           unaQuery.Parameters.ParamByName('parametro2').Value:=unValor;
           unaQuery.Parameters.ParamByName('parametro3').Value:=unValor;
        end;
end;

Como veran se repite el mismo codigo, solo que como depende de con que datamodule tenga que trabajar, estoy obligado a repetir el mismo codigo dos veces.
yo probe hacer algo del tipo :

Código Delphi [-]
 case TipoBase of
      tPropias: with DataModule1 do
      tGeneral: with DataModule2 do
    end;
    begin
     ----------- {codigo que se repite}
pero obviamente esto no sirve, directamente no compila.

Espero que se entienda cual es mi problema y si alguno sabe como solucionar esto para no tener qeu repetir siempre el mismo codigo para un datamodule y para el otro lo agradeceria mucho.
Saludos a todos!!!
  #2  
Antiguo 10-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
creo un procedimiento:
Código Delphi [-]
Procedure Datos:
begin
 unaQuery.Parameters.ParamByName('parametro1').Value:=unValor;
 unaQuery.Parameters.ParamByName('parametro2').Value:=unValor;
 unaQuery.Parameters.ParamByName('parametro3').Value:=unValor;
end;
Luego lo llamo:
Código Delphi [-]
if esBaseMia then {se busca en la base de mis datos}
   begin
       with datamodule1 do
       begin
       Datos;   
       end
   end
else {se busca en la base de las sucursales}
        with datamodule2 do
        begin 
           Datos;
        end;
end;
No se, digo.....
Saludos
__________________
Siempre Novato
  #3  
Antiguo 10-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Thumbs down

Cita:
Empezado por Caral Ver Mensaje
Hola
creo un procedimiento:

...

Luego lo llamo:

...


No se, digo.....
Saludos
Y tu procedimiento no conoce al Query, entonces te da error en diseño.
No se, digo....
  #4  
Antiguo 10-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Osea te brincas el:
Código Delphi [-]
  with datamoduleX do
Ya que los query se llaman EXACTAMENTE IGUAL en ambos datamodule.
Lo único que varia es con que datamodule trabaja y para eso esta el código anterior.
Que dices al respecto?
Saludos
__________________
Siempre Novato
  #5  
Antiguo 10-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Thumbs down

Cita:
Empezado por Caral Ver Mensaje
Hola

....

Que dices al respecto?
Saludos
Digo que tu procedimiento no tenia la cláusula with.
No se, digo.....
  #6  
Antiguo 10-03-2010
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
Probe de la forma que me decis, pero no funciona.
unaQuery esta declarada tanto en el datamodule1 como en el datamodule2;
si yo creo un procedimiento Datos de la forma que mencionas me sale un error al compilar del tipo "identificador no declarado", es decir, no encuentra "unaQuery".
Por las dudas aclaro que en el uses del form de busqueda estan agregados los dos datamodules.

Edit : Pido disculpas por no haber agradecido el interes en darme una respuesta, sin importar cual fuese el resultado. Para ser sincero, estoy tan metido en resolver esto que se me paso.
Espero que cuente el "mas vale tarde que nunca" y te doy mil gracias por responderme.
Saludos!
  #7  
Antiguo 10-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No veo ni entiendo la razón por la que no funcione.
Declaraste el procedimiento en su lista?.
De todos modos no me hagas mucho caso, de estas cosas no se.
BrunoBsso se ve que tiene la respuesta adecuada, ya casi la suelta.
Saludos
__________________
Siempre Novato
  #8  
Antiguo 10-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Thumbs up

Cita:
Empezado por pablopessoa Ver Mensaje
Probe de la forma que me decis, pero no funciona.
unaQuery esta declarada tanto en el datamodule1 como en el datamodule2;
si yo creo un procedimiento Datos de la forma que mencionas me sale un error al compilar del tipo "identificador no declarado", es decir, no encuentra "unaQuery".
Por las dudas aclaro que en el uses del form de busqueda estan agregados los dos datamodules.
Véase que yo tenía razón, habría que explicarlo mejor antes de ser sobervios con "No se, digo....".

Bueno, pablopessoa, lo que tendrías que hacer es ese procedimiento, pero agregarle un argumento. Explico:
Código Delphi [-]
//Suponiendo que tu Query es de tipo TADOQuery y los parámetros son de tipo Integer
procedure CargarDatos(var Q:TADOQuery; Valor1,Valor2,Valor3:Integer);
begin
  with Q do begin
    Parameters.ParamByName('parametro1').Value:=Valor1;
    Parameters.ParamByName('parametro1').Value:=Valor2;
    Parameters.ParamByName('parametro1').Value:=Valor3;
  end;
end;

Y desde el otro procedimiento:
Código Delphi [-]
if esBaseMia then
  CargarDatos(datamodule1.unaQuery,unValor1,unValor2,unValor3)
else
  CargarDatos(datamodule2.unaQuery,unValor1,unValor2,unValor3);

Saludos!!!!
Cita:
Empezado por Caral Ver Mensaje
Hola
No veo ni entiendo la razón por la que no funcione.
Declaraste el procedimiento en su lista?.
De todos modos no me hagas mucho caso, de estas cosas no se.
BrunoBsso se ve que tiene la respuesta adecuada, ya casi la suelta.
Saludos
No se si la adecuada, pero sí una explicativa

Última edición por BrunoBsso fecha: 10-03-2010 a las 03:51:12. Razón: Basta de ser pedantes, sobretodo cuando no sabés
  #9  
Antiguo 10-03-2010
pablopessoa pablopessoa is offline
Miembro
 
Registrado: may 2008
Ubicación: Argentina
Posts: 162
Poder: 16
pablopessoa Va por buen camino
Les agradezco mucho a los dos por la ayuda.
Mas alla de la "sutiles replicas" que hayan tenido, la solucion recomendada por
BrunoBsso compila bien, y de seguro funcione ( ya se me caen los ojos asi que la voy a completar mañana y la pruebo :S).
Lo cual no desmerece la ayuda prestada por Caral.
Si me permiten una sugerencia para el futuro, ni la soberbia ( no todos manejamos el mismo nivel de programacion) ni los botines afilados ( sobre todo para un usuario relativamente nuevo como nosotros) cooperan al buen desempeño de la comunidad en el foro.
Es de saber que al momento de inscribirse en un foro, te encuentres con gente a un mismo nivel, a un nivel medio y a un nivel principiante (sin importar la cantidad de post que hayan hecho). La clave es tener paciencia, ayudar si se puede y se tiene ganas y por sobre todo, tratar de mantener cierta "camaraderia" entre nosotros.
Nuevamente gracias a los dos, saludos y BrunoBsso te comento que soy de La Plata, asi que casi que somos vecinos jajaajaj.
  #10  
Antiguo 10-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Exclamation

Cita:
Empezado por pablopessoa Ver Mensaje
Les agradezco mucho a los dos por la ayuda.
Mas alla de la "sutiles replicas" que hayan tenido, la solucion recomendada por
BrunoBsso compila bien, y de seguro funcione ( ya se me caen los ojos asi que la voy a completar mañana y la pruebo :S).
Lo cual no desmerece la ayuda prestada por Caral.
Si me permiten una sugerencia para el futuro, ni la soberbia ( no todos manejamos el mismo nivel de programacion) ni los botines afilados ( sobre todo para un usuario relativamente nuevo como nosotros) cooperan al buen desempeño de la comunidad en el foro.
Es de saber que al momento de inscribirse en un foro, te encuentres con gente a un mismo nivel, a un nivel medio y a un nivel principiante (sin importar la cantidad de post que hayan hecho). La clave es tener paciencia, ayudar si se puede y se tiene ganas y por sobre todo, tratar de mantener cierta "camaraderia" entre nosotros.
Nuevamente gracias a los dos, saludos y BrunoBsso te comento que soy de La Plata, asi que casi que somos vecinos jajaajaj.
Yo reacciono así ante la soberbia siempre. No me creo el gran programador del milenio, pero sé que no soy un novato total; ver gente con un rango más elevado que otros respondiendo con soberbia me desagrada totalmente (en foros y en la vida real). Cuando uno es soberbio, para mí no merece buen trato a menos que se retracte de eso.
A lo segundo que remarqué, considerando que sos de La Plata y que estás aprendiendo Delphi, no puedo evitar la idea de que estás estudiando en la UNLP justamente en la facu de Informática.
Ya sabés, cuando necesites ayuda en Delphi me avisas y yo intento solucionarte los problemas, pero no siempre voy a saber todo.
Si estás estudiando ahí, cuando tengas a Bertone no te hagas amigo suyo, después te usa para demostrar cosas y casi siempre quedas mal (no es experiencia propia por suerte).
Saludos!
  #11  
Antiguo 10-03-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
El compañero Caral ha intentado ayudar. Cualquiera puede equivocarse en un momento dado o no dar una solución correcta, pero creo que nadie se molesta en dar una solución equivocada a propósito, siempre se hace de buena fé y con la mejor intención del mundo.
Debemos tener paciencia unos con otros, nadie es perfecto.
  #12  
Antiguo 10-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Me alegra que obtuvieras la respuesta adecuada, ademas de ver tu educacion.
Como siempre he dicho, tal vez si me dedicara a la programación o por lo menos algo supiera, ayudaría mas, o trataría.
Con relación a la soberbia: Puede que lo sea algo, tal vez la edad ya me lo permita.
No se en Argentina que significa (No se, digo..).
Pero en castellano esta bien claro.
BrunoBsso: Siempre es un gusto ver código de los que saben, así tratare de seguir aprendiendo de este mi pasatiempo.
Saludos
__________________
Siempre Novato
  #13  
Antiguo 10-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
El compañero Caral ha intentado ayudar. Cualquiera puede equivocarse en un momento dado o no dar una solución correcta, pero creo que nadie se molesta en dar una solución equivocada a propósito, siempre se hace de buena fé y con la mejor intención del mundo.
Debemos tener paciencia unos con otros, nadie es perfecto.
Nunca me interesó que la respuesta haya sido incorrecta.
Si no fuese por ese malintencionado "No se, digo...." yo hubiese contestado con toda amabilidad para explicar el error y mostrar la solución.
Sin embargo, la pedantería de ese "No se, digo...." me hizo saltar la térmica y a cosas así reacciono mal.
Así que repito: mi reacción no se debe a que alguien, en un intento de ayudar, lo haga mal; se debe a la soberbia, y mas cuando es infundada.
  #14  
Antiguo 10-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Seguir con esto es penoso y no creo que te haga quedar muy bien ya que la expresión gramaticalmente hablando esta perfectamente bien empleada.
Seguro as pasado un mal día, así sucede aveces, no estoy resentido ni tengo mala voluntad hacia tu persona.
Te pido humildemente que si te sentiste ofendido por mis palabras me disculpes.
Saludos
__________________
Siempre Novato
  #15  
Antiguo 10-03-2010
BrunoBsso BrunoBsso is offline
Miembro
 
Registrado: nov 2009
Ubicación: Berisso, Buenos Aires, Argentina
Posts: 239
Poder: 15
BrunoBsso Va por buen camino
Talking

Cita:
Empezado por Caral Ver Mensaje
Hola
Seguir con esto es penoso y no creo que te haga quedar muy bien ya que la expresión gramaticalmente hablando esta perfectamente bien empleada.
Seguro as pasado un mal día, así sucede aveces, no estoy resentido ni tengo mala voluntad hacia tu persona.
Te pido humildemente que si te sentiste ofendido por mis palabras me disculpes.
Saludos
No te confundas, yo no seguí con esto. Esa última respuesta fue para Casimiro Notevi, o sea que la estaba escribiendo hace 15 minutos.
No era una continuación de nada, era una explicación a una persona que llegó tarde al tema.
Acepto tus disculpas, bien por vos pedir disculpas cuando ofendés a alguien
Nos vemos!
PD: creo que acá termina la discusión, si alguien quiere que llueva sobre mojado...
PD2: hay una edad predeterminada para tener permiso de ser soberbio? no sabía
  #16  
Antiguo 10-03-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Bueno, amigo, por eso pablopessoa y yo mismo hemos comentado lo de tener paciencia... te explico:
Aquí somos muchas personas de muchos países, en cada país (incluso en cada región y ciudad) existen formas de hablar, "modismos", costumbres, etc. y tal y como ha comentado Caral, en español (de españa) no es ninguna soberbia ni pedantería, se usa más bien justo al contrario, como para decir: "mis conocimientos no llegan a tanto, no sé, digo yo que debe ser así".
A mí al principio me pasaron varias anécdotas parecidas con comentarios de otros compañeros que me sentaron mal porque yo lo veía con mi óptica del sur de españa, pero una vez explicado... me di cuenta que son simplemente formas de hablar de cada lugar del mundo.
El compañero Caral lleva años en clubdelphi y en otros foros ayudando a todo el que ha podido, siempre lo hemos conocido como el "eterno novato", ha escrito varios tutoriales, documentos de creación de programas paso a paso y todos lo conocemos, sabemos que es una persona humilde, paciente y de gran corazón.

En fin, que todo ha sido un malentendido, seguro que estando "cara a cara" esto no hubiese ocurrido, pero así aprendemos todos, ya te digo, a mí me pasó varias veces cosas peores porque yo soy (o era) bastante brusco hablando y soltaba "tacos" e insultos... y luego me daba cuenta que había sido un malentendido por mi parte.

Y nada más, no quiero ser más pesado , que hay que tener paciencia y paciencia y paciencia
  #17  
Antiguo 10-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Hay que hacerlo en delphi:
Te explico:
Código Delphi [-]
Begin
end;

Saludos
__________________
Siempre Novato
  #18  
Antiguo 10-03-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Amigo, siempre hablando bien de mi, sabes que el honor es mio.
Ya a mi edad estas cosas no tienen importancia, yo también tuve 21 años, hace mucho.
Te agradezco mucho tus comentarios amigo.
Saludos
PD: Otra vez comprobé que sigo siendo Novato, algún día aprenderé
__________________
Siempre Novato
  #19  
Antiguo 10-03-2010
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Disculpen si me tiro a la pileta.
No vengo con la intención de señalar con el dedo, pero me extraña pablopessoa que desconozcas el uso de procedimientos, funciones, métodos, y la forma de declararlos. Sobre todo si estás empleando bases de datos.

Si estás iniciandote, es razonable y entendible que no domines el concepto. Pero de igual manera, si estás iniciandote en programación entonces cuesta entender que comiences a aplicar los conceptos relacionado con bases de datos. Por ello cuesta entender hasta donde llegan tus conocimientos.

Como he dicho al inicio, no vengo con la intención de señalar a nadie. Sólo expongo cierta curiosidad, si manejas el concepto de procedimientos con sólo ver el procedimiento de muestra de Caral deberías intuir que debes agregarle los parámetros puesto que necesita de un algo con que operar. El error que tu comentas es precisamente eso: la falta de los parámetros como lo ilustra Bruno.

Caral no tiene la culpa, es el eterno Novato al que tanto queremos. Y sale a la ayuda de cualquiera que los necesite... aunque de ello sepa poco.
Dicho sea de paso... ¡quien les habla es otro novato!
Caral no vive ni se dedica a la programación, es sólo su gran hobbie y pasión. Según recuerdo, amigo Carlos... recién te estas adaptando a la idea y al concepto de procedimientos y funciones. Vas bien

pablopessoa si tienes conocimientos medios de programación (sería útil que nos indiques más o menos hasta donde llegan tus conocimientos) quizá le puedas sacar más provecho a Delphi desde el lado POO. De lo que recuerdo de tus hilos y post veo que al parecer si los tienes. Si estás familiarizándote con el paradigma OO que mejor que potenciar los conceptos que llevandolos en este fantastico lenguaje.

El uso de procedimientos y funciones, es el primer paso para reducir el código como de estructurarlo, organizarlo y conseguir la reutilización. El siguiente paso sería llevar a un nivel más alto: aprovechar el gran poder de la POO... si aún no exploraste esta alternativa, creo que es un buen momento.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
  #20  
Antiguo 10-03-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Realmente creo que ha habido un mal entendido y sinceramente no veo sentido a seguir con esto. A veces las "palabras escritas" no reflejan fielmente lo que uno desea decir y el ánimo con que lo desea decir.

Bruno, se agradece la ayuda y lo completo de tu respuesta.

Creo sinceramente, que si conocieras a un poco (aunque sólo fuera un poco) a [Caral], sabrías que puede ser muchas cosas, pero nunca pedante y/o sobervio. Tu código es correcto, pero creo que tu apreciación en ese sentido en del todo incorrecta.

En cuanto a tu primera respuesta creo, que también ha sido un poco brusca. Piensa que a veces (yo mismo lo hago), escribimos código sin ni siquiera compilarlo (o sin tener el Delphi delante), para dar una ayuda o una idea a la persona que pregunta. Hay bastante posibilidades de que tenga errores, pero lo importante es la idea que se intenta transmitir.

Por lo demás, sigo pensando que ha sido un malentendido y que no vale la pena seguir perdiendo el tiempo con esto.

Un saludo.

P.D: Si no hay inconveniente cierro el hilo, ya que la pregunta ha sido solucionada (con creces) gracias a ambos.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Tema Cerrado


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
existe alguna utilidad o manual para migrar codigo a Delphi 2009? cocute Varios 5 05-02-2009 12:16:17
Existe alguna clase para serializar un objeto en Delphi rgstuamigo OOP 4 04-10-2008 15:05:20
Uso de Compononetes para reutilizar codigo (abuso de la tecnica) olmecas OOP 9 17-01-2008 19:47:28
existe alguna manera de evitar los archivos ddp (diagramas) en D7 pvizcay Varios 2 02-12-2006 16:44:10
¿Existe alguna propiedad que te diga el nº de Items de un ComboBox??. nuri Varios 7 11-08-2005 17:26:35


La franja horaria es GMT +2. Ahora son las 02:38:28.


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