Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Principal > Varios
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Coloboración Paypal con ClubDelphi

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 30/08/2010
ingabraham's Avatar
ingabraham ingabraham is offline
Miembro
 
Join Date: Aug 2007
Posts: 614
Poder: 20
ingabraham Va por buen camino
procedimiento insert into.

alguien tiene algun procedimiento para guardar un insert into de cualquiera tabla y cualquier dimension de campos.
ej:
Código Delphi [-]
procedure guardardatos tabla(ptabla, pnrocampos,campo1,campo2...)
begin
insert into ptabla  value(...);
end;
 
 
INSERT INTO <nombre_tabla> 
[(<campo1>[,<campo2>,...])]
values 
(<valor1>,<valor2>,...);
 
]

y si tienen uno para modificar set, mucho mejor
__________________
Enseñar es la virtud de un sabio.
Reply With Quote
  #2  
Old 30/08/2010
microbiano's Avatar
microbiano microbiano is offline
Miembro
 
Join Date: Sep 2008
Location: Mexico D.F
Posts: 349
Poder: 18
microbiano Va por buen camino
que es lo que realmente quieres

que es lo que realmente quieres un ejemplo de como se hace un insert?

algunos lo hacen asi :
Código Delphi [-]
with fmodulo.qry_registra do
   begin
     sql.Add('insert into volantes(usuario,recibe,volante,fecha_oficio)');
     sql.Add('values (:usuario,:recibe,:volante,:fecha_oficio);');
     Parameters.ParamByName('usuario').Value:=Trim(Fprincipal.wusuario);
     Parameters.ParamByName('recibe').Value:=wrecibio;
     Parameters.ParamByName('volante').Value:= woficio;
     Parameters.ParamByName('fecha_oficio').AsDate:= Fregistro.dtp_fecha_oficio.Date;
     try
      ExecSQL;
      application.MessageBox('Registro Almacenado Correctamente','',mb_ok + mb_iconinformation);
      exit;
     except
      on E:EOleException do
        begin
        //showmessage('Problemas con query ['+text+']');
        MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
        exit;
       end; 
     end;
   end;

sin embargo a mi no me funciona lo que a mi me funciona es:
Código Delphi [-]
with fmodulo.qry_registra do
   begin
     
sql.Add('INSERT INTO VOLANTES (');
   Sql.Add(' usuario,');   
   sql.Add(' recibe,');
   sql.Add(' volante,');
   sql.Add(' fecha_oficio');
   sql.Add(' ) values (');
   sql.Add(' '+QuotedStr(Fprincipal.wusuario)+', ');
   sql.Add(' '+QuotedStr(wrecibio)+', ');
   sql.Add(' '+QuotedStr(woficio)+', ');
   sql.Add(' '+QuotedStr(DateToStr(wfechaoficio))+')');     try
      ExecSQL;
      application.MessageBox('Registro Almacenado Correctamente','',mb_ok + mb_iconinformation);
      exit;
     except
      on E:EOleException do
        begin
        //showmessage('Problemas con query ['+text+']');
        MessageDlg(Format('Error: %s    Codigo: %d', [E.Message, E.ErrorCode]), mtError, [mbOK], 0);
        exit;
       end; 
     end;
   end;

Last edited by microbiano : 30/08/2010 at 23:03. Reason: por error en no ponerlo en codigo entendible
Reply With Quote
  #3  
Old 30/08/2010
Caral's Avatar
[Caral] Caral is offline
Miembro Premium
 
Join Date: Aug 2006
Posts: 7,659
Poder: 28
Caral Va por buen camino
Hola
No amigo, lo que quiere es un procedimiento o funcion que sirva para hacer cualquier insert a cualquier tabla y a cualquier cantidad de campos, sin importar nombre o tipo de campo.
Segun entiendo, algo que sirva para todo.
Saludos
__________________
Siempre Novato
Reply With Quote
  #4  
Old 31/08/2010
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Se podía crear un procedimiento que se le pasara el nombre de la tabla, los campos que vamos a dar valores y los valores de los mismos.
Se recorrería todos los campos de la tabla, si se encuentra uno de los campos pasados entonces se le da el valor también pasado, si no existe ese campo entre los pasados entonces se "pasa de él". Se supone que tendrán un valor por defecto.
En fin, es demasiado genérico, habría que tener muy claro para qué tablas, campos y valores se va a hacer y tenerlo controlado.
Lo que no vale es para todos porque si un campo no puede quedar nulo y no le damos valor... saltará el error
Reply With Quote
  #5  
Old 31/08/2010
Caral's Avatar
[Caral] Caral is offline
Miembro Premium
 
Join Date: Aug 2006
Posts: 7,659
Poder: 28
Caral Va por buen camino
Hola
De que es factible lo es.
Lo que pasa es que habría que diseñar el procedimiento muy bien y con un conocimiento exacto de las tablas.
Pero si se puede, con paciencia.
Saludos
__________________
Siempre Novato
Reply With Quote
  #6  
Old 31/08/2010
robacio_ivan robacio_ivan is offline
Miembro
 
Join Date: Aug 2010
Location: Rio Cuarto - Cordoba
Posts: 21
Poder: 0
robacio_ivan Va por buen camino
Respuesta

Me parece que hacer un procedimiento de esa categoria no es muy complicado, pero me parece que no tendria sentido porque teniendo el componente IBDataSet los insert, edit o delet se hacen de manera muy sencilla.

De todas formas si queres hacer un procedimiento que sirva para todas las tablas lo que podes hacer es una funcion que le pases en nombre de la tabla y en un arreglo los campos de la misma cosa de que lo unico que tenes que hacer es llenar siempre el arreglo con los campos de la tabla a la cual queres hacer el insert.
Reply With Quote
  #7  
Old 31/08/2010
movorack's Avatar
[movorack] movorack is offline
Miguel A. Valero
 
Join Date: Feb 2007
Location: Bogotá - Colombia
Posts: 1,346
Poder: 22
movorack Va camino a la famamovorack Va camino a la fama
y si la inserción es muchisimo mas compleja?

Código SQL [-]
INSERT INTO films (code, title) VALUES ('B6717', get_title('B6717'));

INSERT INTO films (code, title, did, date_prod, kind) VALUES
    ('B6717', 'Tampopo', 110, '1985-02-10', 'Comedy'),
    ('HG120', 'The Dinner Game', 140, DEFAULT, 'Comedy');

INSERT INTO films SELECT * FROM tmp_films WHERE date_prod < '2004-05-07';
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Reply With Quote
  #8  
Old 31/08/2010
ingabraham's Avatar
ingabraham ingabraham is offline
Miembro
 
Join Date: Aug 2007
Posts: 614
Poder: 20
ingabraham Va por buen camino
Por ejemplo he intentado hacerlo, como algo asi.

Código Delphi [-]
 
Procedure TUDBDatos.GuardarEnTabla(Tabla,CadenaCampos:string);
var
  Vsql : string;
begin
   Vsql := 'Insert Into '+ Tabla +'  Values('+ CadenaCampos+')';
   with ibguardar do
   begin
    close;
    SQL.Clear;
    SQL.Add(Vsql);
    ExecSQL;
   end;
   IBTransaction.CommitRetaining;
end;
 
el llamado podria ser.
 
var Str : String;
begin
   Str   :=  ''''+EdNro.TEXT+''''+','+''''+EdCedula.TEXT+''''+','+''''+EdNombre.TEXT+''''+','+''''+EdDir.TEXT+'''  '+','+''''+EdTel.TEXT+''''+','+''''+EdCargo.TEXT+''''+','+''''+DateToStr(FIngreso.date)+''''+','+'''  '+EdSueldo.TEXT+''''+','+''''+EdPorc.TEXT+''''+','+''''+'Activo'+'''' ;
 
 UDBDatos.GuardarEnTabla('EMPLEADOS',Str);
- pero tengo problemas cuando sean fechas tipo date que no se como enviarlas o reales.

-siempre utilizo los qry por que me dan mas facilidad y opciones para realizar mas consultas sql.
__________________
Enseñar es la virtud de un sabio.
Reply With Quote
  #9  
Old 31/08/2010
cloayza cloayza is offline
Miembro
 
Join Date: May 2003
Location: San Pedro de la Paz, Chile
Posts: 948
Poder: 25
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Referente a la pregunta, escribi un pequeno codigo que hace lo que requiere...

Pero como dice Movorack, si es un codigo mas complejo no servira o hay que implementar las restricciones y demas...

Espero te ayude...

Aqui va...
Trabaja en base a 2 vectores de tipo Variant, uno para los campos y otro para los valores, ademas se le debe indicar el nombre de la tabla...

Las funciones habilitadas son:
Select, Insert, Delete, Update;

Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TSQLType=(sqSelect, sqInsert, sqDelete, sqUpdate);

  TSQLArray=array of Variant;

  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    chkInsert: TRadioButton;
    chkSelect: TRadioButton;
    chkUpdate: TRadioButton;
    chkDelete: TRadioButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    AFields, AValues:TSQLArray;
    function CreateSQL(fTable:string; fFields:TSQLArray; fValues:TSQLArray;fSqlType:TSQLType):string;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.CreateSQL(fTable:string; fFields:TSQLArray; fValues:TSQLArray;fSqlType:TSQLType):string;
var
   i:Integer;
   fSql,fVal:string;

   function GetValue():String;
   begin
        case VarType(fValues[i]) of
             varString,
             varDate     : Result:=QuotedStr(fValues[i]);
             varByte,
             varWord,
             varShortInt,
             varSmallint,
             varInteger,
             varLongWord,
             varInt64    : Result:=IntToStr(fValues[i]);
             varSingle,
             varDouble   : Result:=FloatTostr(fValues[i]);
             varBoolean  : if fValues[i] then
                              Result:=QuotedStr('True')
                           else
                              Result:=QuotedStr('False');
        end;
end;
begin
     case (fSqlType) Of
         sqSelect:begin
                       fSql:='';
                       for i := Low(fFields)to High(fFields) do
                       begin
                            fSql:=fSql+fFields[i];
                            if i< High(fFields) then
                               fSql:=fSql+', '
                       end;
                       Result:=Format('SELECT %s FROM %s',[fSql, fTable]);
                  end;
         sqInsert:begin
                       fSql:=''; fVal:='';
                       for i := Low(fFields)to High(fFields) do
                       begin
                            fSql:=fSql+fFields[i];

                            fVal:=fVal+GetValue();

                            if i< High(fFields) then
                            begin
                                 fSql:=fSql+', ';
                                 fVal:=fVal+',';
                            end;
                       end;
                       Result:=Format('INSERT INTO %s (%s) VALUES (%s)',[fTable,fSQL, fVal]);
                  end;
         sqDelete,
         sqUpdate:begin
                       fSql:=''; fVal:='';
                       for i := Low(fFields)to High(fFields) do
                       begin
                            fVal:=GetValue();

                            {Concatena Campo y Valor a asignar...}
                            fSql:=fSql+Format('%s=%s',[fFields[i],fVal]);

                            if i< High(fFields) then
                            begin
                                 if fSqlType=sqUpdate then
                                    fSql:=fSql+', '
                                 else
                                    fSql:=fSql+' AND '
                            end;
                       end;

                       if fSqlType=sqUpdate then
                          Result:=Format('UPDATE %s SET %s;',[fTable,fSQL, fVal])
                       else
                          Result:=Format('DELETE FROM %s WHERE (%s)',[fTable,fSQL, fVal])
                  end;
     end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
     {Dimensiona los vectores}
     SetLength(AFields,6);
     SetLength(AValues,6);

     {Asigna los nombre de los campos...}
     AFields[0]:='Id';
     AFields[1]:='Nombre';
     AFields[2]:='Fecha';
     AFields[3]:='Logico';
     AFields[4]:='Num_Entero';
     AFields[5]:='Num_Real'; 

    {Asigna los valores de cada campo...}
     AValues[0]:=10;
     AValues[1]:='Club Delphi';
     AValues[2]:=Date;
     AValues[3]:=True;
     AValues[4]:=199999;
     AValues[5]:=1000.00;

    {Se llama al procedimiento CreateSQL...}
    {Edit1.Text ->Para ingresar el nombre de la tabla...}
     
     if chkSelect.checked then
        memo1.lines.Text:=CreateSQL(Edit1.Text, AFields, AValues, sqSelect)
     else if chkInsert.Checked then
        memo1.lines.Text:=CreateSQL(Edit1.Text, AFields, AValues, sqInsert)
     else if chkDelete.Checked then
        memo1.lines.Text:=CreateSQL(Edit1.Text, AFields, AValues, sqDelete)
     else if chkUpdate.Checked then
        memo1.lines.Text:=CreateSQL(Edit1.Text, AFields, AValues, sqUpdate)
end;
end.
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
condicionar un procedimiento dentro de otro procedimiento yossi Varios 7 17/05/2010 10:47
procedimiento dentro de procedimiento chechu Varios 6 24/11/2005 23:34
Insert me cierra otro Insert motrildelphi Conexión con bases de datos 0 05/05/2005 12:20
Ayuda, como llamar a un procedimiento desde otro procedimiento? Ariatna Varios 1 01/02/2005 04:05
Insert Con Ibx AGAG4 Conexión con bases de datos 8 09/09/2004 20:29


All times are GMT +2. The time now is 21:10.


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