Solución a Error en el servidor: sql: no rows in result set en plugin de impresora térmica

En este post te mostraré cómo arreglar el error de mi plugin de impresión que dice: Error en el servidor: sql: no rows in result set.

Este error dice que no hay filas en la base de datos, y tal vez te estarás preguntando qué tiene que ver la impresión con una base de datos, por lo que justamente eso será lo que trataré en este post.

sql: no rows in result set

En las primeras versiones del plugin, existía la opción setImpresora que era para establecer la impresora en la que se imprimirían los tickets. Una vez establecida, ese nombre de impresora se quedaba guardado en una base de datos SQLite3.

Este error se ocasiona porque no hay datos en la base de datos porque no has invocado a setImpresora, entonces cuando intentas imprimir te da ese error porque no hay datos en la base de datos (no hay rows, o sea filas, en la base de datos).

Más adelante implementé la función imprimirEnImpresora que permite que tú indiques cuál impresora usar al imprimir, enviándole el nombre de la impresora como cadena.

Solución correcta

Yo siempre he recomendado usar el método imprimirEnImpresora en lugar del método end para terminar la impresión, de este modo tú te encargas de guardar el nombre de la impresora y pasarlo al plugin al imprimir.

Entonces para solucionar este problema, no hagas esto, esto es incorrecto:

let impresora = new Impresora(RUTA_API);
impresora.setFontSize(1, 1);
impresora.write("Fuente 1,1\n");
impresora.setFontSize(1, 2);
impresora.write("Fuente 1,2\n");
impresora.setFontSize(2, 2);
impresora.write("Fuente 2,2\n");
impresora.setFontSize(2, 1);
impresora.write("Fuente 2,1\n");
impresora.setFontSize(1, 1);
impresora.setEmphasize(1);
impresora.write("Emphasize 1\n");
impresora.setEmphasize(0);
impresora.write("Emphasize 0\n");
impresora.setAlign("center");
impresora.write("Centrado\n");
impresora.setAlign("left");
impresora.write("Izquierda\n");
impresora.setAlign("right");
impresora.write("Derecha\n");
impresora.setFont("A");
impresora.write("Fuente A\n");
impresora.setFont("B");
impresora.write("Fuente B\n");
impresora.feed(2);
impresora.write("Separado por 2\n");
impresora.cut();
impresora.cutPartial(); // Pongo este y también cut porque en ocasiones no funciona con cut, solo con cutPartial
impresora.end()
    .then(valor => {
        loguear("Al imprimir: " + valor);
    });

Haz lo siguiente, eso sí es correcto:

let impresora = new Impresora(RUTA_API);
impresora.setFontSize(1, 1);
impresora.write(`Tratando de imprimir en ${nombreImpresora}
`);
impresora.write(mensaje);
impresora.cut();
impresora.cutPartial(); // Pongo este y también cut porque en ocasiones no funciona con cut, solo con cutPartial
impresora.imprimirEnImpresora(nombreImpresora)
    .then(valor => {
        loguear("Al imprimir: " + valor);
    });

La diferencia es que estoy invocando a imprimirEnImpresora pasando el nombre de la impresora, y no simplemente al método end.

Solución simple

Otra solución es simplemente invocar a setImpresora. La mayoría de ocasiones este problema ocurre porque el cliente usa el plugin gratuito e invoca a setImpresora correctamente; le funciona y compra la versión premium, pero al usar la versión premium se le olvida invocar a setImpresora, por lo que aparece el error sql: no rows in result set.

En resumen

Puedes hacer dos cosas: volver a invocar al método setImpresora con el nombre de tu impresora, o comenzar a usar el método imprimirEnImpresora en lugar del método end.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Entradas recientes

Creador de credenciales web – Aplicación gratuita

Hoy te voy a presentar un creador de credenciales que acabo de programar y que…

1 semana hace

Desplegar PWA creada con Vue 3, Vite y SQLite3 en Apache

Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…

2 semanas hace

Arquitectura para wasm con Go, Vue 3, Pinia y Vite

En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…

2 semanas hace

Vue 3 y Vite: crear PWA (Progressive Web App)

En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…

2 semanas hace

Errores de Comlink y algunas soluciones

Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…

2 semanas hace

Esperar promesa para inicializar Store de Pinia con Vue 3

En este artículo te voy a enseñar cómo usar un "top level await" esperando a…

2 semanas hace

Esta web usa cookies.