Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-12-2006
locorez locorez is offline
Registrado
 
Registrado: ene 2006
Posts: 4
Poder: 0
locorez Va por buen camino
error, el índice o la clave principal no puede tener un valor null

Hola,
tengo un pequeño problema con el programa y es el siguiente.
Tengo una query conectada a un grid:
Código SQL [-]
SELECT Stock.ID, Revistes.Revista, Revistes.Preu, Stock.Num, Stock.DataA, Stock.Quantitat, Revistes.Distribuidora
FROM Revistes INNER JOIN Stock ON Revistes.Codi_Barres = Stock.ID;
luego tengo este evento:
Código Delphi [-]
procedure TStock.adotblRevistesIDChange(Sender: TField);
begin
  adotblrevistesID.OnChange := nil;
  adoqry9.Close;
  adoqry9.SQL.Text := 'Select * from revistes where Codi_Barres = :codi';
  adoqry9.Parameters.ParamByName('codi').Value := adotblRevistes.FieldByName('ID').AsString;
  adoqry9.Open;
  adotblRevistes.FieldByName('Revista').AsString := adoqry9Revista.asstring;
  adotblRevistes.FieldByName('Preu').AsCurrency := adoqry9Preu.ascurrency;
  adotblRevistes.FieldByName('Distribuidora').AsString := adoqry9Distribuidora.asstring;
  adotblRevistes.FieldByName('DataA').Value := now;
  adotblRevistes.FieldByName('Num').AsString := Codicorrecte(adotblRevistes.fieldbyname('ID').asstring);
  //adoqry9.Close;
  if length(adotblRevistes.FieldByName('Num').AsString) > 13 then
    adotblRevistes.FieldByName('ID').AsString := copy(adotblRevistes.FieldByName('Num').AsString,0,13);
  adotblrevistesID.OnChange :=  adotblRevistesIDChange;
end;
Ahora explico de que va todo esto XD
El usuario tiene un dbgrid donde solo estan en readonly false el ID y la cantidad. El ID es el código de la revista. Bien, una vez el usuario introduce el codigo de barras de la revista, salta el evento que antes he escrito y hago una consulta, esta:
Código SQL [-]
select * from Revistes where codi_Barres = :codi
Le paso el parametro ID y una vez he identificado la revista con la consulta, relleno los campos con la información. Una vez hecho esto el usuario solo debe de poner la cantidad y ya está. Pero no, a la hora de grabar los datos en la query me pone: "error, el índice o la clave principal no puede tener un valor null". Pero si cierro y vuelvo abrir, el registro, es decir, la revista nueva, ya estará en la tabla stock. No se porque ocurre y todo que funciona queda feo. Alguien me puede ayudar?
Saludos y gracias.

Se me olvidaba, todo y que en el codigo tengo puesto adotblRevistes es una query.

Última edición por locorez fecha: 14-12-2006 a las 01:50:08.
Responder Con Cita
  #2  
Antiguo 14-12-2006
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
creao que estas haciendo una mala logica para insertar un detalle de una revistas...



corrijeme si me equivoco, estas programando que si detecta un cambio en el campo ID de la tabla revistas, se ejecute ese codigo.?


eso esta muy mal no le veo sentido. otra pregunta, segun el codigo anterior, cuando insertaas un nuevo registro?


creo que lo que quieres hacer tu es:

tienes tu tabla Revistas: Select * from Revistas

y quieres ir agregando en un dbgrid las revistas que se estan llevando y cuentas revistas son.


yo dejaria Revistas como estas.


y crearia una tabla llamada detalleRevistas.


pondria un dbgrid.

lo asocio a detallerevistas.

pongo una caja de texto y en la evento keypress de la caja al poner el codigo de la revista

Código Delphi [-]
adoqry9.Close;
  adoqry9.SQL.Text := 'Select * from revistes where Codi_Barres = :codi';
  adoqry9.Parameters.ParamByName('codi').Value := adotblRevistes.FieldByName('ID').AsString;
  adoqry9.Open;

-- aqui hago un adoDetalle.insert;
adotblRevistes --> doDetalle CAMBIANDO ESTO POR DETALLEREVISTA
adotblRevistes.FieldByName('Revista').AsString := adoqry9Revista.asstring;
  adotblRevistes.FieldByName('Preu').AsCurrency := adoqry9Preu.ascurrency;
  adotblRevistes.FieldByName('Distribuidora').AsString := adoqry9Distribuidora.asstring;
  adotblRevistes.FieldByName('DataA').Value := now;
adodetallerevista.post



no se no se lo que pretendes
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #3  
Antiguo 15-12-2006
locorez locorez is offline
Registrado
 
Registrado: ene 2006
Posts: 4
Poder: 0
locorez Va por buen camino
ahora me explico un poco mejor.
Tengo la tabla revistas con su codigo (clave principal), nombre, precio y distribuidor.
Luego tengo la otra tabla, stock. En esta tabla guardo el codigo de la revista, el nº, cantidad y fecha de llegada.
Tengo el adoquery anteriormente mencionado
Código SQL [-]
SELECT Stock.ID, Revistes.Revista, Revistes.Preu, Stock.Num, Stock.DataA, Stock.Quantitat, Revistes.Distribuidora
FROM Revistes INNER JOIN Stock ON Revistes.Codi_Barres = Stock.ID;

Este adoquery esta conectado a un dbgrid. Lo que quiero es, cuando el usuario me introduzca el codigo de la revista en el grid se me ponga toda la información de la revista en el resto de las casillas del grid (nombre, precio, distribuidor; el numero lo se a partir del codigo de barras). Esto lo tengo en el evento onchange del campoID. Todo me funciona y me lo hace. Pero el problema está en que no se porqué, a la hora de cambiar de registro o de hacer un refresh o lo que sea me sale este error de que el indice tiene valor null. Pero si miro en la tabla stock, la revista que he introducido sale con todos los campos llenos.
Responder Con Cita
  #4  
Antiguo 15-12-2006
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
y porque no todo lo poenes en una msima tabla y solo modificas el campo cantidad.




si lo quieres ahcer asi como tu quieres.




no hagas el select con la union,



y en la tabla de socks, creas camps calculados que se calculan automaticamente a partir del valor de tu clave primaria (ID) cuando se encuentre en el catalogo de Revistas(codigo de barras)


y como se hace un campo calculado, busca en el foro o en google, son faciles. click sobre el query o table, opcin datafields editor, en la ventanita que te aparece click boton derecho, add all fields, enseguida otro click boton derecho, add field, y es de tipo calcultaed,


para hacer eso debes de tener otro query que apunte a la tabla revistas, y de ahi va a traer los campos que cumplan con la condicion de busqueda.


busca en google

http://www.google.com.mx/search?hl=e...s+delphi&meta=
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Combobox con indice y valor Moises22 Conexión con bases de datos 8 21-09-2016 13:08:50
Valor Null tanto en tablas como en query Aprendiendo SQL 3 16-10-2006 11:49:14
Integridad sobre un campo que puede ser NULL gluglu Conexión con bases de datos 1 08-02-2005 12:11:45
Valor Null en campo float de un FasReport Romanosky Impresión 4 10-11-2004 17:56:04
Foreign key puede ser null? Firibiri Firebird e Interbase 4 03-10-2003 09:48:36


La franja horaria es GMT +2. Ahora son las 04:14:25.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi