Re: Simbolos dentro de cadenas

From: Henry <hensa22(at)yahoo(dot)es>
To: Gabriel Colina <colina_movil(at)yahoo(dot)com>, Alvaro Herrera <alvherre(at)commandprompt(dot)com>
Cc: 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 17:32:13
Message-ID: 839556.97842.qm@web30815.mail.mud.yahoo.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

como dije anteriormente, no es recomendable hacer update,select,delete y insert en el mismo codigo de la aplicacion,
para eso existen las funciones de postgres.

usando las funciones de postgres desde VB, se arregla todo el problema de caracteres especiales que se quieran insertar, actualizar o borrar.

Para eso existe ADODB.Command, los que saben de VB, sabran lo que estoy diciendo.

Gabriel Colina <colina_movil(at)yahoo(dot)com> escribió:

--- Alvaro Herrera
escribió:

> Gabriel Colina escribió:
>
> > --- Henry 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/

---------------------------(fin del mensaje)---------------------------
TIP 1: para suscribirte y desuscribirte, visita http://archives.postgresql.org/pgsql-es-ayuda


---------------------------------

LLama Gratis a cualquier PC del Mundo.
Llamadas a fijos y móviles desde 1 céntimo por minuto.
http://es.voice.yahoo.com

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Laura Marcela Silva Sÿffffe1nchez 2007-03-14 17:57:12 Re: arrancar postgres automaticamente
Previous Message Gabriel Colina 2007-03-14 17:05:59 Re: Simbolos dentro de cadenas