From: | Gabriel Colina <colina_movil(at)yahoo(dot)com> |
---|---|
To: | Alvaro Herrera <alvherre(at)commandprompt(dot)com> |
Cc: | Henry <hensa22(at)yahoo(dot)es>, Gabriel Ferro <gabrielrferro(at)yahoo(dot)com(dot)ar>, pgsql-es-ayuda(at)postgresql(dot)org |
Subject: | Re: Simbolos dentro de cadenas |
Date: | 2007-03-14 02:13:55 |
Message-ID: | 474766.72812.qm@web34703.mail.mud.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
--- Alvaro Herrera <alvherre(at)commandprompt(dot)com>
escribió:
> Gabriel Colina escribió:
>
> > --- Henry <hensa22(at)yahoo(dot)es> escribió:
> > >
> > > sql= "UPDATE ""Acta"" SET " _
> > > & """FechaCarga""='" &
> > > Format(campos(2), "dd/mm/yyyy") & "', " _
> > > & """Lugar""='" & lugar & "' "
> _
> > > & " WHERE ""CodActa""='" &
> > > tuplas2!CodActa & "';"
> > > cnn.Execute (sql)
> > >
> > Lo que me parece que te molesta es las comillas
> dobles
> > dos veces, pone comillas "" para visual y '' para
> la
> > sentencia postgres.
>
> No es tan facil, porque Postgres quiere que los
> nombres de las tablas y
> columnas con mayusculas vengan con comillas dobles.
Eso es correcto, Alvaro, por eso mismo digo que lo que
le pase a postgres lleve comillas simples, la variable
sql antes del execute lleve dobles.
Pero aca pongo varios ejemplos de como resolver desde
visual y los he usado todos.
Ejemplo 1
Para mi muy apropiado.
Creo una funcion en el lenguaje PLPGSQL, en
postgresql, (aclaro que si alguna palabra no la pongo
bien por ejemplo plpgsql no se escribe asi, me importa
poco, debatan sobre conceptos por favor).
Retomando el tema aca hay una funcion a la que
pasandole parametros desde visual borra una tabla
auxiliar, la llena de datos le hace algun insert y
podria ser un update en fin todo.
Incluso uno de los select de la insercion invoca otra
funcion.
CREATE OR REPLACE FUNCTION
"central"."fnc_imp_ficha_articulo" (text, date,
integer) RETURNS boolean AS
$body$
begin
delete from central.imp_ficha_stock;
insert into central.imp_ficha_stock
(id_local,sucursal,
empresa,id_lin,documento,serie,numero,fecha,
id_articulo,entradas,salidas,saldos)
select id_local,sucursal,
empresa,id_lin,documento,serie,numero,fecha,
id_articulo,entradas,salidas,saldos from
central.fnc_ficha_articulo($1,$2,$3);
return true;
end;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT
SECURITY INVOKER;
Llamada desde visual
DtaSysGeGcFunc.central_fnc_imp_ficha_articulo
TxtDatos.Text, DTPDESDE.Value,
Val(DataComboLocal.BoundText)
Donde dtasysgegcfunc es igual a un dataenviroment
es un procedimiento del dataenviroment que llama a la
funcion, cuando creas el dataenviroment y su conecion
al DSN podes definir comando o procedimiento,
eligiendo procdimiento nos muestras las funciones de
la base de datos y elgiendo ejecuta esta pasando los
parametros que la funcion exige. aca se representa por
.central_fnc_imp_ficha_articulo, donde central_ es el
nombre del esquema y el punto visual lo representa con
_
TxtDatos.Text = textbox
DTPDESDE.Value = dtpicker
Val(DataComboLocal.BoundText) el valor numerico del
boundtext de un datacombobox.
Esto es facil y muy simple, se usa igual que en M$.
Ejemplo 2.
Se crea la funcion en pgplsql en este caso pongo otra
de ejemplo, pero puedo usar la misma
CREATE OR REPLACE FUNCTION
"central"."fnc_ing_lineas_doc" (bigint) RETURNS date
AS
$body$
declare
v_id_cab alias for $1;
curtime date;
BEGIN
curtime :='now';
delete from central.documentos where id_cab = $1;
insert into central.documentos
(id_cab,id_articulo,id_presupuesto,cantidad,fob,cif,costo_unitario,
costo_unit_final,precio_venta_unitario,dto1,dto2,impuesto_col_1,impuesto_col_2,ubicacion,
conteo)
select
id_cab,id_articulo,id_presupuesto,cantidad,fob,cif,costo_unitario,
costo_unit_final,precio_venta_unitario,dto1,dto2,impuesto_col_1,impuesto_col_2,ubicacion,
conteo from central.aux_lineas_doc where id_cab = $1;
delete from central.aux_lineas_doc where id_cab = $1;
RETURN curtime;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT
SECURITY INVOKER;
y desde un adodatacontrol, desde una conexion definida
por codigo o desde un dataenviroment como es este caso
ejecuto esto.
DtaSysGc.cnSysGeGc.Execute "select * from
central.fnc_ing_lineas_doc(" &
AdoCabezales.Recordset.Fields("id_cab") & ")"
Es Facil.
3 Metodo parecido al que plantea mi tocayo Gabriel
Ferro, a quien confieso le debo el hecho de darle una
mano mejor, que la que le di en la pregunta anterior y
por lo cual le pido disculpas y espero compenzarlo con
esto.
Desde visual y sin crear una funcion en postgresql.
DtaSysGc.cnSysGeGc.Execute "insert into
central.documentos (id_articulo,id_cab,cantidad)
select '" & TxtDatos(0).Text & "' as id_articulo, " &
nCabezales & " as id_cab, " &
Abs(Val(Lbldatos(4).Caption)) & " as cantidad;"
Las comillas dobles encierran todo lo que se va a
ejecuttar, pero si miras esto previamente de un msgbox
o desde el depurador verias que lo que pasa es esto
insert into central.documentos
(id_articulo,id_cab,cantidad) select 'PH8' as
id_articulo, 924,123.45 as cantidad;
En el id_articulo se pasa un caracter entre comillas
simples.
Igual tendrias que hacer en el update, lo que pasa que
la fecha si yo lo hago asi la trataria con
year-month-day para que o sea '2007-03-14'
Esta opcion Gabriel es la que menos me gusta, creo que
las funciones estan para resolver este tipo de cosas
ahorrandonos escribir codigo en nuestra aplicacion y
pudiendo hacer una programacion lo mas cerca de la
programacion en tres capas.
Disculpame Alvaro por llenar el foro con cosas de
Visual, pero me encanta que la gente tenga soluciones
para que tambien el mundo de M$ empieze a preferir
usar postgresql, por que ganan en robustes y no
pierden facilidades.
> Alvaro Herrera
> http://www.CommandPrompt.com/
> PostgreSQL Replication, Consulting, Custom
> Development, 24x7 support
>
Atte. Gabriel Colina
__________________________________________________
Correo Yahoo!
Espacio para todos tus mensajes, antivirus y antispam ¡gratis!
Regístrate ya - http://correo.espanol.yahoo.com/
From | Date | Subject | |
---|---|---|---|
Next Message | Gabriel Colina | 2007-03-14 02:44:40 | Re: no existe la funcion |
Previous Message | Victor Lopez | 2007-03-14 02:11:08 | Re: privilegios |