PDA

Ver la Versión Completa : un un INSERT INTO 'Operacion no Aplicable' con ODBC+MySQL


orfeo
04-02-2004, 04:12:24
Hola, he querido ser una programador prolijo y dejar de usar los data-Aware, solo usar las hermosas sentencias SQL, lo malo es que no me andan
:confused:

Las sentencias SQL estan corectas (creo), estas andan desde el SQL Explorador.

El primer insert anda, igual que 'LAST_INSERT_ID() ' retorna el valor corecto, el problema esta en el ultimo insert ( sobre Telefono_own_EmpresaInspeccion), al ejecutar el .ExecSQL; me dice que 'no es una operacion aplicable', el debuger me tira el error de MySQL 1216.
La DOC indica: "'Deadlock, lock wait timeout, and foreign key constraint violations (no parent row, child rows exist) now return native MySQL error codes 1213, 1205, 1216, 1217, respectively."
lo raro es que si inserto la tupla desde el SQL explorer anda.

Tampoco me andan algunas UPDATE sobre telefono, tirando errores similares, sindo que andas sobre el SQL Explorer.

La verdad es que no se si es un error pavo, no se que mirar...

Les mando el codigo y los create table por si alguno tiene ganas de mirarlos.

chau, y gracias..

/----codigo:
with dmSPI.QTemp do
begin
Close;
SQL.Clear;
SQL.Add('INSERT INTO TELEFONO (caracteristica,numero,descripcion,tipo)');
SQL.Add('VALUES (:caract,:num,:desc,:tipo)');
ParamByName('num').AsString:=edtTelefono.Text;
ParamByName('caract').AsString:=edtCaracteristica.Text;
ParamByName('desc').AsString:=mmoDescripcion.Text;
ParamByName('tipo').AsString:=cmbTipo.Items.Strings[cmbTipo.ItemIndex];
ExecSQL; // inserta corectamente

Close;
SQL.Clear;
SQL.Add('SELECT LAST_INSERT_ID() as lastID');
open;
KeyID:=Fields.FieldByName('lastID').AsInteger;
ShowMessage(intToSTR(KEYID)+':'+nombreempresa); // dato correcto
end;

with dmSPI.QTemp do
begin
Close;
SQL.Clear;
SQL.Add('INSERT INTO Telefono_own_EmpresaInspeccion (id,empresaInspeccion)');
SQL.Add('VALUES (:id,:nombre);');
ParamByName('id').AsWord:=KeyID;
ParamByName('nombre').AsString:=nombreempresa;
ExecSQL; *falla y tira el error*
end;

\-

/---CREATE TABLE ---

CREATE TABLE `Telefono` (
id bigint(20) unsigned NOT NULL auto_increment,
`numero` char(20) NOT NULL default '',
`caracteristica` char(10) NOT NULL default '',
`descripcion` varchar(100) default '',
`tipo` enum('TEL','TEL/FAX','FAX','CEL') default 'TEL',
PRIMARY KEY (id)
) TYPE=InnoDB COMMENT='Contiene telefonos de entidades de la SPI';



CREATE TABLE Telefono_own_EmpresaInspeccion (
id bigint(20) unsigned NOT NULL auto_increment,
empresaInspeccion char(50) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (id) REFERENCES Telefono(id)
ON DELETE CASCADE
ON UPDATE CASCADE,

INDEX idxEmpresaInspeccion (empresaInspeccion) ,
FOREIGN KEY (empresaInspeccion) REFERENCES empresaInspeccion(nombre)
ON DELETE CASCADE
ON UPDATE CASCADE,
) TYPE=InnoDB COMMENT='Asocia telefonos a EmpresaInspeccion';



\---CREATE TABLE ---