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]