Delphi - ayuda con odbc

 
Vista:

ayuda con odbc

Publicado por sherif (23 intervenciones) el 05/04/2006 02:24:13
Tengo el siguiente problema:

fecha.text:=datetimetostr(now);
ejemplo.insertar.close;
ejemplo.insertar.sql.clear;
ejemplo.insertar.SQL.add('insert into clientes (id_cliente,nombre,apellido_paterno,apellido_materno,domicilio,codigo_postal,telefono,
fecha_ingreso) values (:id, :nom, :ap, :am, :dom, :cp, :tel, :fecha)');
ejemplo.insertar.Parameters[0].value:= id.text;
ejemplo.insertar.Parameters[1].value:= nom.text;
ejemplo.insertar.Parameters[2].value:= ap.text;
ejemplo.insertar.Parameters[3].value:= am.text;
ejemplo.insertar.Parameters[4].value:= dom.text;
ejemplo.insertar.Parameters[5].value:=cp.text;
ejemplo.insertar.Parameters[6].value:= tel.text;
ejemplo.insertar.Parameters[7].value:=fecha.text;
ejemplo.insertar.ExecSQL;

A la hora de insertar un registro me manda el siguiente error: "Argumentos incorrectos o fuera del intervalo permitido", pero si lo inserta en la base de datos aunque despues de eso el programa se traba

Estoy utilizando Adaptive server anywhere
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ayuda con odbc

Publicado por rob3030 (23 intervenciones) el 05/04/2006 18:09:16
Tienes que verificar que tipo de campo tienes en tu tabla (string, integer, float, etc) ya que no todas las conversiones estan permitidas y si estas utilizando un servidor como SERVER 2003 vas ha tener muchos problemas por utilizar variables de tipo VAR, lo mejor es definir el tipo de valor a introducir en la tabla y hacer las conversiones pertinentes.

Por ejemplo, suponiendo que el id_cliente sea un entero

ejemplo.insertar.Parameters[0].datatype:= ftinteger;
ejemplo.insertar.Parameters[0].asinteger:= strtoint(id.text);

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc

Publicado por sherif (23 intervenciones) el 05/04/2006 18:25:57
gracias!!

Pero otra otra pregunta como defino mis campos varchar?..los defino como cadena osea ftstring..?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc

Publicado por rob3030 (23 intervenciones) el 06/04/2006 02:13:08
Si, los campos varchar se definen como ftstring y los usas en asignacion como asstring.

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc

Publicado por sherif (23 intervenciones) el 06/04/2006 03:19:06
Otravez jeje!!

La manera en la ke me dijiste me marca errores dice ke no tengo declarado el ftinteger,asinteger,ftstring,asstring.. etc asi con todas mi codigo es el siguiente:

ejemplo.insertar.close;
ejemplo.insertar.sql.clear;
ejemplo.insertar.SQL.add('insert into clientes (id_cliente,nombre,apellido_paterno,apellido_materno,domicilio,codigo_postal,
telefono,fecha_ingreso)values(:id, :nom, :ap, :am, :dom, :cp, :tel, :fecha)');
ejemplo.insertar.Parameters[0].DataType:=ftinteger;
ejemplo.insertar.Parameters[0].asInteger:= strtoint(id.text);
ejemplo.insertar.Parameters[1].DataType:=ftstring;
ejemplo.insertar.Parameters[1].asString:=nom.text;
ejemplo.insertar.Parameters[2].DataType:=ftstring;
ejemplo.insertar.Parameters[2].asString:=ap.text;
ejemplo.insertar.Parameters[3].DataType:=ftstring;
ejemplo.insertar.Parameters[3].asString:= am.text;
ejemplo.insertar.Parameters[4].DataType:=ftstring;
ejemplo.insertar.Parameters[4].asString:= dom;
ejemplo.insertar.Parameters[5].DataType:=ftinteger;
ejemplo.insertar.Parameters[5].asInteger:= strtoint(cp.text);
ejemplo.insertar.Parameters[6].DataType:=ftinteger;
ejemplo.insertar.Parameters[6].asInteger:= strtoint(tel.text);
ejemplo.insertar.Parameters[7].DataType:=ftdatetime;
ejemplo.insertar.Parameters[7].asDateTime:=strtodatetime(fecha.text);
ejemplo.insertar.ExecSQL;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc

Publicado por Sebastian corradi (25 intervenciones) el 06/04/2006 15:23:49
Fijate debugearlo y en que linea genera el error. y si inserta todos los valores de los campos bien ( sin cortar caracteres), para que no te tire el otro ero que mencionas mas adelante ( ftstring... etc) inclui la unit "DB" que es donde estan definidos ( viene con delphi).
si no conseguis nada con lo mencinado antes fijate que en la sentencia queden los valores entre comillas ,podes usar un quotestr o usar las comillas dobles
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc

Publicado por Incognito (54 intervenciones) el 06/04/2006 22:33:43
Saludos! Amigo Sherif,

he estado observando tu pregunta y me doy cuenta de que seria preferible que en lugar de utilizar la propiedad params o parameters utilices ParamByName('<Nombre Parametro>') y luego chequea los tipos de datos que estas transfiriendo a la sentencia SQL... Procurar que al transferirlos le definas el tipo en la misma propiedad, por ejemplo, para campos String (Varchar): ParamByName('<Nombre Parametro>').AsString...

Espero que esta informacion te sea de mucha ayuda...

Incognito -La Solucion Efectiva del Futuro -Inmediato-
R.D.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc pregunta incognito

Publicado por sherif (23 intervenciones) el 07/04/2006 03:25:15
Saludos incognito!!

Porque me sigue marcando error en el asinteger,asstring..etc

[Error] Unit1.pas(62): Undeclared identifier: 'asInteger'

asi con todos agregue como me dijeron el uniot db para ke me los aceptara pero pues me sigue marcando error

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, DBCtrls, StdCtrls, Mask,db ;

si me podrias mandar un ejemplo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc pregunta incognito

Publicado por Incognito (54 intervenciones) el 07/04/2006 20:59:15
...Muestrame el codigo de nuevo a ver como lo modificaste, por favor...para decirte de inmediato...

Saludos!

de,

Incognito -La Solucion Efectiva del Futuro -Inmediato-
R.D.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc pregunta incognito

Publicado por sherif (23 intervenciones) el 07/04/2006 21:05:01
Hola !!

Aki esta mi codigo ojala y me pudieras sacar de las dudas porfavor


ejemplo.insertar.close;
ejemplo.insertar.sql.clear;
ejemplo.insertar.SQL.add('insert into clientes (id_cliente,nombre,apellido_paterno,apellido_materno,domicilio,codigo_postal,telefono,fecha_ingreso)values(:id, :nom, :ap, :am, :dom, :cp, :tel, :fecha)');
ejemplo.insertar.parameters.Parambyname('id').asinteger:= strtoint(id.text);
ejemplo.insertar.parameters.Parambyname('nom').asstring:=nom.text;
ejemplo.insertar.parameters.Parambyname('ap').asstring:=ap.text;
ejemplo.insertar.parameters.Parambyname('am').asstring:= am.text;
ejemplo.insertar.parameters.Parambyname('dom').asstring:= dom.text;
ejemplo.insertar.parameters.Parambyname('cp').asinteger:= strtoint(cp.text);
ejemplo.insertar.parameters.Parambyname('tel').asinteger:= strtoint(tel.text);
ejemplo.insertar.parameters.Parambynam('fecha').asdatetime:=strtodatetime (fecha.text);
ejemplo.insertar.ExecSQL;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc pregunta incognito

Publicado por Incognito (54 intervenciones) el 10/04/2006 15:48:17
...en la parte de la Instruccion:

ejemplo.insertar.parameters.Parambyname('fecha').AsDateTime, por ejemplo,
Quitale la propiedad 'parameters', o sea:

ejemplo.insertar.Parambyname('fecha').AsDateTime, y asi sucesivamente con las demas instrucciones de parametros...

Espero que esto te sirva de mucha ayuda, estoy siempre a tus ordenes, puedes enviarme mensajes a mi direccion [email protected] amigo Sherif...

Incognito -La Solucion Efectiva del Futuro -Inmediato-
Delphi 2006 -Revolucion Extrema-
R.D.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc pregunta incognito

Publicado por sherif (23 intervenciones) el 10/04/2006 18:36:12
Hola !!

La solucion ke me diste ya la he hecho y me marca error lo ke pasa ke insertar es un adoquery y pues en sus propiedades no trae el parambyname necesito poner primero parameters y despues parambyname asi como esta y utilizo el ftinteger etc para los tipos de datos pero ya resolvi el problema de insercion aunke no al 100 % por ke me manda el siguiente error

"Project Project1.exe raised exception class EOle exception with message 'Argumentos incorrectos fuera del intervalo permitido o en conflictos con otros'"

Solo este error me manda pero si me inserta en las tablas y la vdd no se ke sea este error mi codigo es asi:

otro.insertar.Close;
otro.insertar.SQL.clear;
otro.insertar.SQL.Add('insert into clientes(id_cliente,nombre,fecha) values (:id,:nom,:fecha)');
otro.insertar.parameters.ParamByName('id').DataType:=ftinteger;
otro.insertar.Parameters.ParamByName('id').value:=strtoint(id.text);
otro.insertar.parameters.ParamByName('nom').datatype:=ftstring;
otro.insertar.parameters.ParamByName('nom').value:=nom.text;
otro.insertar.Parameters.ParamByName('fecha').datatype:=ftdatetime;
otro.insertar.parameters.ParamByName('fecha').value:=strtodatetime(fecha.text);

otro.insertar.ExecSQL;
otro.t_clientes.Refresh;

si me podrias ayudar!!

te agradezco de antemano!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc pregunta incognito

Publicado por Incognito (54 intervenciones) el 10/04/2006 19:42:22
...Ponlo de esta manera (en la parte de los parametros):

otro.insertar.parameters.ParamByName('id').AsInteger:=ftinteger;
otro.insertar.Parameters.ParamByName('id').AsString:=strtoint(id.text);
otro.insertar.parameters.ParamByName('nom').AsString:=ftstring;
otro.insertar.parameters.ParamByName('nom').AsString=nom.text;
otro.insertar.Parameters.ParamByName('fecha').AsDateTime:=ftdatetime;
otro.insertar.parameters.ParamByName('fecha').AsString:=strtodatetime(fecha.text);

...Fijate que se diferencia en el tipo de dato especifico de la propiedad ParamByName..., y una inquietud que te tengo ¿estas usando algun campo memo? porque si es asi para su equivalente tendrias que utilizar ("AsMemo")...Y otra cosa mas: la linea :
otro.insertar.parameters.ParamByName('nom').AsString:=ftstring;

esta duplicada o Dos Veces, verifica bien el codigo ultimo que me enviaste...

Espero que te sea de ayuda...

Incognito -La Solucion Efectiva del Futuro -Inmediato-
R.D.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc pregunta incognito

Publicado por sherif (23 intervenciones) el 10/04/2006 21:26:48
Si entiendo la forma ke me dices pero lo ke pasa es ke como estoy utilizando los componentes ado, no tienen las funciones asinteger,asstring,etc .. Esas las contienen los elementos del data acces y si las pongo me marca ke no estan declaradas ..y pues si inserta en la bd pero pues cada vez ke inserta me manda el error ya mencionado de argumentos incorrectos..

Estoy utilizando delphi 5 no se si sea por la version...

y pues disculpa las molestias pero pues la vdd ke nose ke onda con el error ese
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con odbc pregunta incognito

Publicado por Incognito (54 intervenciones) el 10/04/2006 21:41:21
...Entonces si estas utilizando D5, chequeaste los tipos de datos?, ahora bien, es bueno que te actualices a D6 o D7, porque la Vers. 5 tiene algunos problemas con ADO, y a partir de la Vers. 6 tales componentes trabajan excelentemente con todas sus propiedades, esa vers. 5 viene incompleta en cuanto a componentes ADO propiamente dicho y era un tiempo pasado en que se utilizaba conexiones Interfaces intermediarias (BDE, ODBC, etc.)...

Incognito -La Solucion Efectiva del Futuro -Inmediato-
Delphi 2006 -Revolucion Extrema-
R.D.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar