![]() |
TIbquery
Hola!! Vereis tengo un procedimiento al cual le paso como parametro un array dinamico string para los campos de la tabla y un string que sera el nombre de la tabla. Tengo otro array dinamico declarado global para los valores(VNuevos). En este procedimiento es dnd voy a realizar una consulta insert. Mi problema es q no tengo ni idea de como recorrer los dos arrays para poder hacer la consulta. Yo hago lo siguiente:
procedure TForm1.OpInsert(campos : array of string; Tabla:String); var i,j : integer; begin with DM do begin for i:=0 to high(campos) do QrOperacion.SQL.Add('insert into ' + Tabla + '(' + campos[i] + ')'); for j:=0 to high(VNuevos) do QrOperacion.SQL.Add('values (' + VNuevos[j] + ')'); QrOperacion.open; end; end; El error que me da es: Acces violation at address 00404567; A ver si alguien puede ayudarme. Muxas gracias:) |
Por favor, utiliza TAG's de Delphi (ultimos botones del editor) cuando introduzcas código.
Independientemente de que el código funcione o no, el error de "Access Violation" suele ser por un acceso a memoria incorrecto (algo que no está creado correctamente -dirección incorrecta-). Ejecuta este código paso a paso y dinos en qué linea falla exactamente, seguramente alguno de los objetos que estás usando está a nil. Además de lo comentado, apuntarte un par de cosas. * Si usas el HIGH en un for (para el limite superior), lo lógico sería utilizar el LOW para el límite inferior. * Si a cada vuelta del FOR, añades el texto: 'insert into ' + Tabla + '(' + campos[i] + ')' a la SQL, al final del bucle tendrás un SQL como ésta:
|
Gracias x contestar tan rapido. No entiendo lo de los tags:( . Me hace lo que dices pero es q no se como hacerlo. El error da en el segundo for. He puesto el low
with DM do begin for i:=low(campos) to high(campos) do QrOperacion.SQL.Add('insert into ' + Tabla + '(' + campos[i] + ')'); for j:=low(campos) to high(VNuevos) do QrOperacion.SQL.Add('values (' + VNuevos[i] + ')'); end; |
Buenas otra vez. Lo he planteado de otro forma xo me sigue dando error. He decidido recorrer los arrays e introducirlos en una vble string.
procedure TForm1.OpInsert(campos : array of string; Tabla:String); var i,j: integer; ConsultCamp,ConsultValor : String; begin with DM do begin for i:=low(campos) to high(campos) do ConsultCamp := ConsultCamp + '''' + campos[i] + '''' + ',' ; ConsultCamp := copy (ConsultCamp,-1,length(ConsultCamp)-2); for j:=low(VNuevos) to high(VNuevos) do ConsultValor := ConsultValor + '''' + VNuevos[j] + '''' + ',' ; ConsultValor := copy(ConsultValor,-1,length(ConsultValor)-1); {Memo1.Lines.Add(ConsultCamp); Memo1.Lines.Add(ConsultValor);} QrOperacion.SQL.Add('insert into ' + Tabla + '(' + ConsultCamp + ')'); QrOperacion.SQL.Add('values (' + ConsultValor + ')'); QrOperacion.Open; end; end; Pero me da un error: sql Parse error: EOF in string detected' |
|
ahhhh!!!! Vale, me faltaba la comilla final. Lo q pasa es q me da un error: sql error code = -104 'Token unknow - line 1, char 26 'Nombre''. El 1º campo es el q no me reconoce.
|
Encontre el error
Muxas gracias x todo. El error q me daba era xq en los campos habia puesto comillas simples y son dobles. Gracias x atenderme!!
|
La franja horaria es GMT +2. Ahora son las 02:47:42. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi