PDA

Ver la Versión Completa : Extraccion valores MySQL


vinny
27-05-2003, 11:33:31
Hola de nuevo,

No se si estas preguntas deberian ubicarse mejor en otro grupo del foro, en tal caso, avisarme.

Realizado un SELECT de varios campos procedo a hacer comparaciones con valores de los campos para hacer unas tareas u otras.

Algunos de los campos extraidos no tiene valor (son NULL), entonces a la hora de hacer una comparación con dichos campos, la aplicación aborta dandome un error de "Access violation at address... Read of address 00000000".

La comparacion es:

if (Row[Voz3]='*') AND (cantado = false) then

donde el valor del campo Voz3 es NULL

Entonces intuyo que el problema se debe al comparar un null con cualquier valor, ya que las comparaciones anteriores no fallan y los campos tienen valor.

Una posible solución que se me ocurre es no admitir valores NULL en la base de datos y utilizar algun comodin como NULL, pero no me parece muy elegante.

Cómo se puede solventar dicha controversia?

Gracias,
Vicente

__cadetill
27-05-2003, 11:52:53
prueba con..

if not Row.FieldByName('Voz30').IsNull and/or .....

Espero te sirva

vinny
27-05-2003, 12:19:12
De momento no me ha solucionado el problema, la sintaxis no me la reconoce y como tampoco he tocado antes Delphi, poco puedo hacer por mis propios medios para intentar jugar con algo parecido o buscar funciones similares.

Sigo vendido ;)

vinny
27-05-2003, 12:25:26
Os adjunto el codigo tal y como lo tengo, asi podrá ser más facil a quien pueda echarme una mano encontrar como puedo reordenar codigo o que funciones puedo utilizar tal y como tengo definidas las variables.

Bacterion
27-05-2003, 13:58:02
Es que estás usando "algo" que seguramente va a bajo nivel
Row: PMYSQL_ROW;
(¿Api de MySQL?)
en vez de un dataset normal.
¿Por qué no pruebas a usar un SQLConnection (D6 o superior) con driver MySQL?
Así podras usar los TFields (y por lo tanto el FieldByName) y podrás preguntar si son NULL o no y hacer la comparación en este último caso.
Si te quedas con esas funciones, tendrás que mirar en la ayuda de las mismas o preguntar en el foro de MySQL

vinny
27-05-2003, 14:00:20
Desconozco el uso de SQL Connection, como hacer conexiones, moverme por los datos, insertar filas...

roman
27-05-2003, 16:41:46
Posteado originalmente por vinny
La comparacion es:

if (Row[Voz3]='*') AND (cantado = false) then



La API de MySql devuelve punteros a nil para los valores null de manera que primero debes checar que Row[Voz3] no sea nil:


if (Row[Voz3] <> nil) and (Row[Voz3] = '*') and (Cantado = false) then


En general debes tener en cuenta que una estructura como PMYSQL_ROW es un arreglo de punteros PChar por lo que es recomendable traducir primero esos a strings (que es más natutral para Delphi) y de ahí al tipo de datos que requieras.

Un consejo: Es difícil empezar con Delphi y es difícil empezar con MySql pero es más difícil empezar con ambos a la vez. Quizá te convenga buscar las componentes ZEOS (busca en Google) para que puedas acceder fácilmente a MySql y preocuparte ahora más por Delphi.

// Saludos