PDA

Ver la Versión Completa : Error ´no corresponding master record found´


alexglez1255
08-06-2015, 03:20:35
Cuando doy un Applyupdates(0) en datasets anidados me aparece este error....alguien sabe por que..?
el codigo es el siguiente


With logicanegocio do

If cdsArticContUnClienteCANTIDAD.Value>0 then
begin
cdsArticContUnClienteCOD_ARTICULO.AsInteger:=CDSListalmaCOD_ARTICULO.AsInteger;
cdsArticContUnClientePRECIO.Value:=CDSListalmaPRECIO_VENTA.Value;
cdsArticContUnClienteDESCRIPCION_ARTICULO.Value:=CDSListAlmaDESCRIPCION.Value;
cdsArticContUnClienteCOD_VENDEDOR.Value:=cdsContratUnClienteCOD_VENDEDOR.Value;
cdsArticContUnClienteCAPTURISTA.Value:=CDSdatosempresaUSUARIOACCESO.Value;
cdsArticContUnClienteIDCAPTURISTA.Value:=CDSdatosempresaIDUSUARIO.Value;
If (cdsArticContUnCliente.Modified) then
begin
cdsArticContUnCliente.ApplyUpdates(0);
modulodatos.IBTransaction1.Active:=true;
modulodatos.IBTransaction1.commit;
end
Else ShowMessage('Nada que gravar ');
end // end if si se hizo algun cambio
Else begin
ShowMessage('debe introducir la cantidad ');
DBedit4.SetFocus;
end; // End if si la cantidad es >0


Esta tabla es detalle de otra tabla llamada contratos y en esta tabla pongo los articulos de venta del contrato...sin embargo creo que no he definido esa relacion en delphi aunque ya lo hice en el ibexpert no se como hacerlo en el Delphi y creoo que por alli esta el problema...GRACIAS POR SU GRAN AYUDA..Y QUE MI DIOS LOS BENDIGA..POR SU LABOR ALTRUISTA...

ecfisa
08-06-2015, 08:15:12
Hola alexglez1255.

Algunos datos que van a servirnos para ayudarte:

¿ Que componentes estas usando para la conexión, IBX, DBExpress, ... ?
¿ Cuales son las tablas y los campos por los cuales has establecido la relación master/detail ?
Cuando guardas los datos de la tabla detalle, ¿ Dispones del valor de la tabla maestro que establece la relación ?


Saludos :)

alexglez1255
08-06-2015, 14:07:09
1.-Uso interbase
2.-en ibexpert la tabla contratos y articuloscontrato son master y detalle por el campo cod_contrato
3.-Al guardar el detalle (articuloscontrato) me da el error mencionado..trate de establecer en el Dataset el MasterSource Pero me dice que no esta permitido en Datasets anidados, ya que para las altas uso campos anidados...
me explico ..? trate de hacer o que dice el manual de la cara oculta de delphi ...

Relaciones maestro/detalles

Para establecer una relación master/detail entre dos conjuntos de datos sólo hay que
hacer cambios en el que va a funcionar como conjunto de datos dependiente. En el
caso de TClientDataSet, las propiedades que hay que modificar son las siguientes:
Propiedad Propósito
MasterSource Un datasource asociado a la tabla maestra
IndexName ó IndexFieldNames Criterio de ordenación en la tabla dependiente
MasterFields Campos de la tabla maestra que forman la relación
Es necesario configurar una de las propiedades IndexName ó IndexFieldNames; ya
hemos visto que son modos alternativos y excluyentes de establecer un orden sobre
los registros del conjunto de datos. Este criterio de ordenación es el que se aprovecha
para restringir eficientemente el cursor sobre los detalles. En el ejemplo que mostramos antes, los pedidos deben estar ordenados por la columna Cliente.

ecfisa
08-06-2015, 19:59:58
Hola alexglez1255.

Te faltó especificar los componentes de conexión.

Unos enlaces que explican como establecer la relación master/detail con diferentes componentes :

Problemas inserción de registros en IBDataset maestro-detalle y Foreign Key (http://www.clubdelphi.com/foros/showthread.php?t=75180)
Dos Combobox o DBCombobox Master/Detail (http://www.clubdelphi.com/foros/showthread.php?t=85695)
Consulta Masetro/Detalle DBGRID (http://www.clubdelphi.com/foros/showthread.php?t=85355)
TibDataSet Maestro Detalle (http://www.clubdelphi.com/foros/showthread.php?t=74837)
Master-detail relationships ADO and Delphi (http://delphi.about.com/od/database/l/aa071001a.htm)


Saludos :)

alexglez1255
09-06-2015, 00:58:02
Gracias eicfsa voy a revisar toda esa informacion para ver si encuentro el error

alexglez1255
09-06-2015, 15:54:56
ecfisa, ya tengo las tres tablas de campos anidados, correctamente acomodadas como master y detail..pero ahora me sale el
error 'at the beginning of the table', a que crees que se deba,
te pongo el codigo para que lo vean..muchas gracias por su ayuda....

procedure Taltadecontratos.BtguardarArticuloClick(Sender: TObject);
begin

With logicanegocio do
begin
If cdsArticContUnClienteCANTIDAD.Value>0 then
begin
if cdsContratUnCliente.State in dsEditModes then
cdsContratUnCliente.Post;
if cdsArticContUnCliente.State in dsEditModes then
cdsArticContUnCliente.Post;
{ If cdsContratUnCliente.ChangeCount>0 then
cdsContratUnCliente.ApplyUpdates(0);
cdsArticContUnCliente.post;
If cdsArticContUnCliente.ChangeCount>0 then
begin
cdsArticContUnCliente.ApplyUpdates(0);
If cdsContratUnCliente.ChangeCount>0 then
cdsContratUnCliente.ApplyUpdates(0);
modulodatos.IBTransaction1.Active:=true;
modulodatos.IBTransaction1.commit;
end
Else ShowMessage('Nada que gravar ');
end }
Else begin
ShowMessage('debe introducir la cantidad ');
DBedit4.SetFocus;
end; // End if si la cantidad es >0

end; // end Logicanegocio

end;

me marca el error en :

cdsArticContUnCliente.Post;

Que es tabla detalle de contratos..

ecfisa
09-06-2015, 23:50:38
Hola alexglez1255

Busqué por el error, supuestamente de Paradox y no es muy explícito... Al parecer indica que la tabla está vacia (http://www.delphipages.com/forum/showthread.php?t=7337) o no tiene un índice definido (http://www.clubdelphi.com/foros/showthread.php?t=6838).
Espero te sirvan los enlaces.

Saludos :)

alexglez1255
19-06-2015, 02:19:11
muchas gracias ecfisa, revise los enlances y quede igual....tuve que crear nuevos qrys y cliendatasets y fue de la manera que funciono y hice a un lado el cliendataset anidado, espero que a la hora de usarlos en las busquedas me funcione...muchas gracias