![]() |
Diferencia resultados consulta en MariaDB y PWC9
Resulta que una misma instrucción ejecutada desde PWC9, (mediante un EXEC SQL), o desde un gestor de BD de MariaDB, (una versión "libre" de MySql), da distintos resultados, ¿alguien tiene una idea de por qué puede ser?
La instrucción es ésta: Código SQL:
En en gestor, el resultado es 140, (que es el correcto) y en PWC, el resultado es 0, (sin errores en SQLSTATE, ni nada por el estilo), con otras instrucciones no pasa, pero cuando hay varios "AND", falla. Muchas gracias |
@Josber, lo de las comillas dobles al final imagino que es el copy/paste...
Por lo pronto se me ocurre una sintaxis más ligera: Código SQL:
Me parece que va a ser problema de codificación de caracteres, es decir que en este caso el valor "ZACIÓN" lleva tilde y puede que no se pase correctamente en la consulta y se interprete por otro caracter en el lado BBDD. Intenta la misma consulta pero donde ambos valores alfanuméricos son letras sin acentos y compara a ver. Si el resultado es correcto (el valor es el mismo), eso es que hemos encontrado el problema. |
Gracias @Kuk, sí lo de las comillas, ha sido el copy/pega, y lo tengo que hacer así de largo, porque es un montaje con un string, por eso está el tema de CONCAT_WS, en cuanto al acento, pues no he probado a no ponerlo, mañana hago la prueba a ver, todas las tablas las creo con COLLATE='utf8_spanish_ci, porque de lo contario, se da de bofetadas con las Ñs, acentos y demás
Un saludo |
@Josber, UTF8 es una codificación Unicode, multi-byte, cosa que se puede tratar en PowerCOBOL únicamente con PIC N (N=National) y se configura la codificación a nivel de proyecto y trae alguna que otra complicación a nivel código. Es un tema que pocos hacemos mucho caso pero es importante.
El caso es que existe codificación mono-byte para el Español y no necesitas para nada Unicode como UTF8. Pon el cotejamiento en latin1_spanish_ci Echa on ojo a esto: https://blog.unreal4u.com/2012/08/so...rset-en-mysql/ Cita:
Estoy casi seguro que el problema viene de ahí. |
@Josber, una cosa importante que se me olvidaba: cuando los datos ya están dentro de la BBDD creo que cambiando la codificación no cambia cómo el dato está guardado (es decir que seguirían en UTF8). Así que hay que tener cuidado con esto si se confirma que con los datos sin tildes no hay problema, habría que mirar cómo convertir los datos ya existentes.
|
Sí @Kuk, cuando ya están, el formato no cambia pero, como es una tabla de pruebas y los C.P., están en una hoja de Excel que me bajé de la página de Correos, creo recordar, sin problemas para "cepillarme" la tabla y volver a crearla.
Gracias por todo |
@Josber, qué tal? Has hecho las pruebas?
|
Cita:
Sigo investigando .... |
@Josber, no sé qué versión de Power estás utilizando. Qué tienes como valor en RCS cuando haces clic en el Proyecto?
Yo creo que es cuestión de ir probando. Prueba con latin1_general_ci Mientras yo voy mirando a ver si encuentro más info. |
Cita:
Yo también sigo buscando, más que nada porque no es lo mismo buscar, por ejemplo, continuo que continuó y como los campos de búsqueda que tengo definidos incluye las observaciones, ahí puede haber de todo escrito, porque si fueran sólo los nombres y apellidos o direcciones, me daría igual. *PD, me acabo de dar cuenta que con las Ñs, tampoco funciona, y eso ya es más importante, así que tiene que ser cuestión de elegir el "COLLATE" correcto, lo que me fastidia, es que tengo otras tablas en otros programas con latin1_spanis y utf8_spanish y funciona perfectamente. Voy a borrar la BD por completo y crear de nuevo las tablas a ver si tengo suerte y es un fallo en la creación Muchas gracias.- |
@Josber, es raro que te funcione con UTF8.... Por cierto cómo accedes a la base, vía SQL embebido o el AdoDB?
Estoy mirando unos pequeños ejemplos de hace años cuando el asunto no fue más allá de unos tests (yo siempre he usado ficheros indexados) y me está petando por todas partes :D :D :D Acabo de hacer la prueba y a mi con el Power 10.1, el RCS=ASCII y la DB en latin1_general_ci me funciona todo.... Algo debe estar mal con tu BBDD :piensa: |
Uso SQL Embebido, quería haber usado ADO pero, no he encontrado ningún ejemplo claro de cómo hacer las cosas, lo poquito que hay por el foro, no me ha aclarado nada y los ejemplos de PWC, aún menos
Aprovecho por si alguien tiene la "bondad", sólo necesito de ADO, un ejemplo claro, bien explicado y sencillo de: Código:
- Un OPENUn salu2.- |
@Josber, yo creo que la mejor opción sería pasar por el OCX que facilitó @Nitzer, que por lo visto es una maravilla: https://www.cobolforo.es/showthread....ara-SQL-nativo
|
Anda, es verdad, no me acordaba, éste finde lo pruebo.
Gracias.- |
Hola Amigos:
Yo tengo unos procesos que suben info desde mis archivos cobol a un SQL Server. Lo hacía con ADO y Power 8. Más o menos como un ejemplo que puse acá hace mucho. El tema con ADO es que hay que programar mucho, asimismo no he tenido problemas, solamente hice volcado de datos hacia la BBDD, usé DROP TABLE, CREATE TABLE e INSERT. Por ahora solamente he necesitado hacer volcado de grandes cantidades de datos. Nada de un trabajo interactico con la BBDD como ABMs y Listados. Ahora para un nuevo cliente que tenía que hacer la misma tarea, me puse a probar el ocx de Andres. Pero repito, solamente volcado de datos, así que usé solamente el comando EXECUTE pasando ahí el string con el comando. Y funciona de maravilla. Ya con más tiempo voy a empezar a usarlo "profesionalmente", para decirlo de alguna manera. Lo único que no maneja transacciones, que es algo que me interesaría mucho. Tendría que ver si con el comando EXECUTE se podría hacer. Pero es todo para investigar y probar. Lo que sí que para poder hacer cosas con ese ocx lo veo realmente muy sencillo. Saludos. Fito... |
¿Alguien podría subir varios ejemplos?, porque lo estoy intentando usar, pero no consigo nada, no sé ni siquiera si se conecta bien a la BD, (es a través de ODBC),, ejemplos con conexión a la BD, contar registros, (que en mis pruebas, siempre me da 0), etc. las cosas normales que se hacen con una BD y también, muy importante, el tema de controlar los errores, lo que explica Andrés, (nuestro estimado @Nitzer), de la opción DIAGNOTICRECORD, que supongo que será parecido a SQLMSG, pero que no hay manera.
Me haría un gran favor, ahora que me he decidido a pasar del SQL EMBEBIDO .. Muchas gracias |
Hola:
Acá paso el código de lo que dije anteriormente. Necesito exportar a una BBDD los datos de artículos, en este caso. Para eso creo un archivo .CSV y con la instrucción BULK INSERT de Sql Server lo importo. Código COBOL:
Cuando avance más con esto, voy pasando. Pero el ejemplo que pone Andres en el pdf que pasó, está excelentemente explicado. Saludos. Fito... |
Gracias @Fito, no digo que lo que ha puesto @Nitzer no esté bien explicado, (creo que explica muy bien las cosas), lo que digo es que faltan "casos", como por ejemplo, poder leer los errores que da una BD y que devuelve en las variables SQLMSG y SQLSTATE, (por lo menos cuando es SQLEmbebido), y que, según comenta, se gestionan con DIAGNOTICRECORD, pero no dice cómo y es algo muy importante, sobre todo, cuando estás haciendo el programa, te da un error y no sabes exactamente que es, y quizás sea una simple coma olvidada en la instrucción SQL, un paréntesis, una variable mal escrita ..., algún ejemplo más de un COUNT, SELECT, etc, para poder comparar con los otros que tiene puesto, etc.
Un salu2.- |
Holaaa.
Quedé muy impresionado con la instrucción BULK INSERT de SqlServer: Código COBOL:
Este es el log que genero con el proceso. Fíejnse los tiempos, impresionante. Cuando lo hacía con INSERT uno por uno, tardaba varias horas cargar tantos registros. Tambien tengan en cuenta que dentro de ese tiempo está la generación del archivo CSV, no es sólo la importación. Lo que si es que ese de Ventas que es más grande solamente me cargaba 3.159.999 registros, no sé si la limitación esa es los registros que puede manejar, o de acuerdo al tamaño del registro, la cantidad de caracteres. Es decir, si en registro fuera más largo, importaría menos lineas. Por eso los estoy subiendo cada tres millones de registros. Esa cantodad de ahi son 10 inserts. Una maravilla... Saludos Fito... |
No sé si es que el OCX no funciona bien con MariaDB, o es que estoy haciéndolo mal, como prueba, estoy haciendo esto desde PWC (versión 9 sobre Win 10, para más info)
Código COBOL:
La conexión, supongo que la hace bien, puesto que si cambio algún parámetro para que sea incorrecta, me abre una ventana pidiendo datos de conexión, según @Nitzer (Andrés), la función OpenQuery, devuelve en RETORNO, el número de registros, sé que el número es 308, (es lo que me da, si hago la consulta directamente a la Bd), pero siempre me devuelve 0, si ésta instrucción no funciona, el resto de funciones, ya me da lo mismo, esta se usa mucho para saber si hay registros con ciertas condiciones. ¿Alguien ve si es que estoy haciendo algo mal? Mil gracias |
Bueno pues, desisto de seguir, como tampoco tengo más ideas del resto de foreros, no voy a perder más tiempo, una desilusión, porque esperaba algo más de otros foreros, (los que me habéis aportado alguna idea o sugerencia, mil gracias, como siempre), continuo con SQLEmbebido y ya veremos por dónde sale la cosa.
Gracias por vuestro tiempo |
@Josber, has probado el OCX de @Nitzer? A ver se asoma y nos da unos ejemplos para el cursor y estas cosas....
|
@Kuk, sí, sí que lo he probado y para ese OCX es para el que pedía ayuda sobre todo pero, no he tenido suerte, si miras las últimas entradas de éste tema, verás cuáles son los principales problemas que he tenido con ese OCX.
Un salu2.- |
mysql mariadb EXTMYSQL ocx
Hola @Josber
Me ha surgido la necesidad ahora de tener que conectarme a un servidor apache , con la version Mysql MariaDB estuve probando Ado de Micro (via odbc) , probe con la EXTMYSQL (directo usando como conector libmysql.dll) que paso @Joseg, con resultados positivos en ambos casos. Y tambien probe con la ocx que compartio @Nitzer , con buenos resultados tambien te pongo dos ejemplos todo via odbc Version PowerCobol 5.0 *> Lectura de Cantidad de Registros en la tabla Código COBOL:
*> Select simple Código COBOL:
Saludos .. Voy a seguir investigando y probando las tres opciones. |
Ocx para SQL nativo
Probando con el ocx de nitzer , agrego como hacer un Insert y Update
*Update* Código COBOL:
*Insert* Código COBOL:
|
Gracias @fastpho pero, entre otras cosas, me sigue faltando, por ejemplo, el saber porqué ha dado fallo, (si es porque hay un fallo en la construcción de la sentencia, si es porque no hay más registros, etc.), es el valor que se devuelve automáticamente en la variable SQLSTATE cuando es SQL Embebido
Un salu2.- |
Ocx para SQL nativo
@Josber lo que podido comprobar como dice en el manual , es que en el Evento “DiagnoticRecord” se dispara si hay algún error en las sentencias
Por Ejemplo deliberadamente puse una dato mal en la propiedad “ConnectionString” me trajo: Código COBOL:
Con respecto al RETORNO solamente para los métodos ,por las pruebas que hice , tiene 3 valores 0 , -1 , 1 Código COBOL:
Voy a seguir probando Saludos... |
Hola Gente:
Yo estoy usando el ocx de Andrés para hacer insert en unas tablas Sql Server. Anda a la perfección. En el evento "DiagnosticRecord" grabo un log con los errores. El Returning del invoke donde llamamos a los métodos del objeto, tengo entendido que revuelve error si el método no se puede realizar. En cambio en el "DiagnosticRecord" devuelve el error de la instruccion que enviamos. Por ejemplo su realizamos un "Execute" con un Insert adentro. El Returning devuelve el error del método Execute y el evento DiagnosticRecord el error del Insert. Saludos... Fito... |
| La franja horaria es GMT +2. Ahora son las 17:04. |
Powered by: vBulletin, Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.