Club Delphi  
    Paypal   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

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-10-2008
Avatar de elcolo83
elcolo83 elcolo83 is offline
Miembro
 
Registrado: feb 2007
Ubicación: Argentina
Posts: 65
Poder: 20
elcolo83 Va por buen camino
Hola a todos... Yo en mi caso ahora estoy provando una nueva forma de organizarme... vamos a ver como ve con esto...
Uso los componentes IBX y Firebird; lo que hago basicamente es crear un conjunto de componentes (TIBTransaction y TDBDataSet) por cada tabla automaticamente con la funcion CrearCompDB, el cual el mismo me genera el codigo SQL básico para editar, insertar, borrar y actualizar registros (ya que es muy tedioso hacerlo cuando tenes muchas tablas ) cada conjunto de componentes es usado por lo modulos que editan sus datos.
Ademas tengo un modulo para busqueda simple el cual arma la consula dependiendo de la tabla que se vaya a consultar y muestra los campos en un grid, el cual abre el modulo correspondiente a la tabla que se esta consultando cuando se hace doble click en un registro del resultado...

En fin... no soy muy amigo de lo estatico y prefiero que el programa vaya armando y manipulando las consultas y componentes que se conectan segun la demanda del usuario.... Claro que hay que tener cuidado con el codigo para no consumir mas recursos de los necesarios.

La funcion que uso para crear los componentes y el codigo SQL basico

Código Delphi [-]
Procedure CrearCompDB(S:String; DB_: TIBDataBase);
var
  TR: TIBTransaction;
  DS: TIBDataSet;
  I: Integer;
begin
  //S es el nombre de la tabla a la cual se quiere conectar//
  S:= UpperCase(S); 


  TR:= TIBTransaction.Create(Application);
  TR.DefaultDatabase:= DB_;
  TR.Name:= 'TR'+S;

  DS:= TIBDataSet.Create(Application);
  DS.Database:= DB_;
  DS.Transaction:= TR;

  DB.GetFieldNames(S, L.Lines);

  DS.SelectSQL.Clear;
  DS.SelectSQL.Add('Select * from '+S);

  DS.InsertSQL.Clear;
  DS.InsertSQL.Add('INSERT INTO '+S+' (');
  for I := 0 to L.Lines.Count - 1 do
    begin
      if i<(L.Lines.Count-1) then
        DS.InsertSQL.Add(L.Lines[i]+',')
      else DS.InsertSQL.Add(L.Lines[i]+')');
    end;
  DS.InsertSQL.Add('VALUES (');
  for I := 0 to L.Lines.Count - 1 do
    begin
      if i<(L.Lines.Count-1) then
        DS.InsertSQL.Add(':'+L.Lines[i]+',')
      else DS.InsertSQL.Add(':'+L.Lines[i]+')');
    end;

  DS.ModifySQL.Clear;
  DS.ModifySQL.Add('UPDATE '+S+' SET');
  for I := 0 to L.Lines.Count - 1 do
   if L.Lines[i]<>'ID' then
    begin
      if i<(L.Lines.Count-1) then
        DS.ModifySQL.Add(L.Lines[i]+' = :'+L.Lines[i]+',')
      else DS.ModifySQL.Add(L.Lines[i]+' = :'+L.Lines[i]);
    end;
  DS.ModifySQL.Add('where ID= :OLD_ID');

  DS.DeleteSQL.Clear;
  DS.DeleteSQL.Add('DELETE FROM '+S+' WHERE ID = :OLD_ID');

  DS.RefreshSQL.Add('SELECT * FROM '+S+' WHERE ID = :ID');
  try
    DS.Active:= True;
  except
    on e:exception do
       ShowMessage(e.Message);
  end;
  DS.Name:= 'DS'+S;
  DS.AfterPost:= Commit;
  DS.OnPostError:= IBDataSet1.OnPostError;

  DSw.DataSet:= TDataSet(Application.FindComponent('DS'+S));
  DS.Active:= True;
end;

Saludos a todos
Responder Con Cita
  #2  
Antiguo 23-10-2008
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 23
AzidRain Va camino a la fama
Roman en el caso del BDE, me parece que hay que construir y definir los parámetros previamante. Tanto MyDAC como Zeos hacen la conversión de tipos al vuelo y no requieren que se los definas previamente. Checalo.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #3  
Antiguo 23-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que no Azid. Si quito la parte de

Código SQL [-]
aram is null

funciona bien sin necesidad de definir los parámetros. El tipo de datos se determina cuando usas ParamByName(...).AsXXX

Si asigno previamente el tipo de datos, sigue marcando el error.

// Saludos
Responder Con Cita
  #4  
Antiguo 23-10-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
elcolo83:

Tu idea es muy buena, pero quizá estás reinventando la rueda. Me explico:

No sé cómo funcionen los componentes IB, pero en otros similares, si pones una sentencia como esta:

Código SQL [-]
select * from tabla where id = :id

en la propiedad SQL, puedes hacer inserciones, actualizaciones y supresiones sin necesidad de especificar nada más. Incluso, por ejemplo, si modificas un registro, el SQL que se genera incluye sólo los campos modificados, mientras que como lo haces, siempre se incluyen todos.

Más aún. Si sigues el truco de AzidRain y pones la sentencia

Código SQL [-]
select * from tabla where id = :id or :id is null

entonces también te sirve para hacer selecciones.

Las propiedades InsertSql, UpdateSql y DeleteSql, creo que están más para casos en que se involucren varias tablas y la sentencia SQL adecuada no pueda deducirse en automático.

// Saludos
Responder Con Cita
  #5  
Antiguo 23-10-2008
Avatar de elcolo83
elcolo83 elcolo83 is offline
Miembro
 
Registrado: feb 2007
Ubicación: Argentina
Posts: 65
Poder: 20
elcolo83 Va por buen camino
Roman


Sinceramente nunca habia provado la sentencia con los IBX, mañana lo provare... si anda, seria genial ya que eliminaria la parte del codigo que me genera el codigo sql solo dejaria las lineas que crean los componentes para que mi sistema funcione...
Muy buena data... gracias, despues te cuento como me fue
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
Deseo.... un vinculo o una serie.... georkis PHP 8 22-06-2008 06:25:04
No me guarda el fichero en el directorio que deseo kapullok_2006 Varios 4 22-11-2007 10:21:17
Nunca se vieron tantos hombres y tantas patadas marcoszorrilla La Taberna 3 25-04-2007 19:49:47
Deseo instalar SQL en Delphi 7 JuanchoRM SQL 5 27-07-2006 10:22:31
Imprecion a tantos cm... marce Impresión 1 09-12-2003 16:23:49


La franja horaria es GMT +2. Ahora son las 02:47:45.


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