Hola Alejandro,

Alejandro Rivas escribió:
Saludos.

Tengo un problema en relación al uso de Macro para insertar registros en bases
de mysql.

Estoy aprendiendo incipientemente sobre esta area.
Sé que existe el ooforum pero es en ingles y no puedo comunicarme. Así que aquí
está mi esperanza

La cuestión es como organizar una linea de comando para ser ejecutada por la
macro;  por ejemplo :


sub insertaregistroenbase

    Dim oSql as String
    Dim oResult as Object
    Dim oStatement as Object
    Dim db as object

    db = connect_to_database ("base2")  REM es una funcion y trabaja bien!

    REM esta es la linea de comando en mysql que quiero reemplazar
   ''mysql> insert into notas (codigo) values ('PARAINF10');         

   REM esta es la linea que he intentan  'n' veces pero no me funciona
'oSql = "insert into ""notas"" (""codigo"") ""values ('"PARAINF10"')'" REM ? Cómo sería usando sólo usando el comando mysql REM igual, he intentado colocando la informacion en variables data0 REM y en columnad el nombre del campo data0="PARAINF11" : columnad="codigo"
    oSql = "insert into ""notas"" ("+columnad+") ""values"" ('"+data0+"')'"
     REM -- ? Cómo sería usando variables

    oStatement = db.createStatement
    'oResult = oStatement.executeQuery (oSql)
    oResult = oStatement.execute (oSql)

    disconnect_from_database (db)   REM es una funcion y trabaja bien!
End Sub

Experimenté  de tantas formas usando las " que ya perdí la lógica del uso
Si alguien me ofrece un metodo para organizar esas lineas de comando para
macros en OO. Además, he buscado informarción en la red y aunque he logrado formar unos
contenidos, no me presentan una guía para esta situación.

Gracias anticipadas.


oSql = "insert into ""notas"" (""codigo"") values ('PARAINF10')"

debería funcionar SI los nombres de la tabla y columna son "notas" y
"codigo" EN MINÚSULAS. Al entrecomillarlos los estás enviando así, en
minúsculas. SI no los entrecomillas, por más que los escribas en minúsc.
llegan al servidor en MAYÚSC.

Copio y pego lo que ya he respondido:

Tenía una columna de una tabla cuyo nombre eran varios campos. Yo
quería hacer filtrado con esa columna. Digamos  "Nombre del
Encargado". Y justamente las comillas me llevaron por un día de
tortura. Con el resultado final, me va a enteder lo que le estoy
diciendo:

sFiltro = """" & sCampo + """ = '" & sValorSelecc & "'"

4 comillas!!!!!!!!!! Esto definitivamente no es para usuários finales
pero sé que es culpa de Basic.

Si: como los identificadores (nombre de tabla/campo) se escriben entre
comillas (no siempre, ver más abajo), tienes el problema de que los
literales tipo cadena se encierran entre comillas en Basic (pero en casi
todos los lenguajes de programación)

sCadena = "Pedro dijo Hola"

te retrona Pedro dijo Hola

para que aparezcan comillas dentro de la cadena, tienes que redoblarlas:

sCadena = "Pedro dijo ""Hola"""


Te habrás dado cuenta que este ejemplo es muy simple, y fácil de darse
cuenta si te equivocas, dado que OOo Basic colorea la sintaxis.

Como bien dices, el ejemplo llevado a bases de datos, por ejemplo formar
la cadena para un filtro, es más complejo, y más fácil de generar un
error, porque los colores no (siempre) te ayudan.


*********************************************************************

Una solución más fácil sería emplear una función:

Function entreComillar(sTexto$)
    Dim sComillas$ : sComillas = """"
    entreComillar() = sComillas & sTexto & sComillas
End Function


de esto modo:


Sub TEST
    MsgBox "Pedro dijo " & entreComillar("Hola"), 64, "Entrecomillar"
End Sub

******************************************************************

PERO las cosas son más complejas: el carácter que se emplea para citar
los identificadores VARIA de un RDBMS a otro, algunos emplean comillas
dobles (la mayoría, pero otros una comilla simple (') y otros un acento
grave (`). Lo mas seguro, es pasar como parámetro adicional una
referencia a la conexión (para obtener la MetaData):

Function setIdentifierQuoteString( sIdentifier As String, oConnection As
com.sun.star.sdb.Connection) As String
  Dim sQuoteString As String
  sQuoteString = oConnection.getMetaData().getIdentifierQuoteString()
  setIdentifierQuoteString = sQuoteString & sIdentifier & sQuoteString
End Function

'**********************************************************************
'o como
'setIdentifierQuoteString es muy largo
'abreviamos setIQS()

Function setIQS( sIdentifier As String, _
                        oConnection As com.sun.star.sdb.Connection) As
String
    setIQS() = ""
    If IsNull( oConnection ) Then Exit Function
    Dim sQuoteString As String
    sQuoteString = oConnection.getMetaData().getIdentifierQuoteString()
    setIQS = sQuoteString & sIdentifier & sQuoteString
End Function



********************************************************************

Lo más fácil de todo: crear las tablas empleando SQL (menú Herramientas
- SQL), sin emplear espacios, caracteres especiales, etc.

si escribes

CREATE TABLE mi_tabla [...]

el servidor lo convierte a mayúsculas, luego NO debes preocuparte por
entrecomillar.

Pero "Mi tabla" (espacio en blanco), o "Dirección" (carácter no
permitido ó) deben ir citados.


Muchas gracias por toda la información de las comillas. La lección es
que lo mejor es nombres sin espacios.

sin espacios, sin acentos, sin caracteres especiales (ñ, ß, etc), en
definitiva, nada que no sea ASCII.

Pero recuerda que para que esto funcione debes crear la tabla ejecutando
un comando SQL desde el menú  "Herramientas" - "SQL" (no empleando la
herramienta gráfica desde "Crear tabla en vista Diseño" ni el Asistente
para crearlas).

Si empleas la vista de diseño, por más que escribas empleados, OOo pasa
el nombre como "empleados" (en minúscula); luego deberás entrecomillar
siempre el nombre, porque si usas un filtro como "empleados = " & sAlgo,
al pasar al servidor, empleados pasa en mayúsculas (por no estar
entrecomillado), y te generará un error: no hay ningún campo llamado
EMPLEADOS, sino empleados :-( .




--
Ariel Constenla-Haile
La Plata, Argentina

[EMAIL PROTECTED]
[EMAIL PROTECTED]

http://www.arielconstenlahaile.com.ar/ooo/



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Responder a