Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   ayuda por favor!!! (https://www.clubdelphi.com/foros/showthread.php?t=57213)

calistian 08-06-2008 18:38:54

ayuda por favor!!!
 
hola gente del foro, mi problema es el siguiente tengo un formulario donde doy de altas a socios osea guardo los datos en una base de datos q esta en Mysql y en el formulario tengo un campo donde se encuentra la fecha de ingreso q es de tipo date donde uso un TdateTimePicker pero cuando lo voy a registrar me sale el siguiente error:

debugger exception notificacion: proyect principal.exe raised exception class edbengine error with message 'operation no aplicable.'. process stoped use step or run to continue

el error creo q esta en la fecha xq la base de datos no admite el formato de la fecha de delphi o algo por el estilo je asi q por ahora toy usando una variable de tipo string para q me admita el campo de fechas y seguir con la alta de socios

la fecha de ingreso q esta en mi bd es de tipo date; como podria hacer cuando de de alta a un socio ingrese la fecha y se guarde en mi base de datos.

Código delphi [-]Código SQL [-]procedure talta_socios.preparo_altas_socios;
begin dm.consulta.Close; dm.consulta.SQL.Clear; dm.consulta.SQL.Add('insert into socios values(:id_socio,:ingreso,:nombre,:nacimiento,:dni,:domicilio,:telefono,:movil,:mail,:estado,: peso,:cuota,: observaciones)');
dm.consulta.ParamByName('id_socio').AsInteger:= strtoint(ed_id.Text);
dm.consulta.ParamByName('ingreso').AsDate:=fechaing.Date; dm.consulta.ParamByName('nombre').AsString:=ed_nombre.Text;
dm.consulta.ParamByName('nacimiento').Asstring:='2008/05/29';//lo q toy usando para q me admita en la base de datos
dm.consulta.ParamByName('dni').AsInteger:=strtoint(ed_dni.Text);
dm.consulta.ParamByName('domicilio').AsString:=ed_domicilio.Text;
dm.consulta.ParamByName('telefono').AsInteger:=strtoint(ed_telefono.Text);
dm.consulta.ParamByName('movil').AsInteger:=strtoint(ed_movil.Text);
dm.consulta.ParamByName('mail').AsString:=ed_mail.Text;
dm.consulta.ParamByName('estado').AsString:=ed_estado.Text;
dm.consulta.ParamByName('peso').AsString:=ed_peso.Text;
dm.consulta.ParamByName('cuota').AsFloat:=strtofloat(ed_cuota.Text);
dm.consulta.ParamByName('observaciones').AsString:=ed_observaciones.Text;
end;

CrazySoft 08-06-2008 19:18:17

prueba con

Código Delphi [-]
dm.consulta.ParamByName('ingreso').AsDateTime:=fechaing.Date;
dm.consulta.ParamByName('nacimiento').AsDateTime:=strtodate('2008/05/29');

calistian 08-06-2008 19:36:27

continua el poblema
 
hola CrazySoft probe con lo q me diste pero el problema es el mismo me da el mismo error: operacion no aplicable.

calistian 08-06-2008 19:58:10

Continua el problema
 
Código:

procedure talta_socios.preparo_altas_socios;
begin
  dm.consulta.Close;
  dm.consulta.SQL.Clear;
  dm.consulta.SQL.Add('insert into socios values(:id_socio,:ingreso,:nombre,:nacimiento,:dni,:domicilio,:telefono,:movil,:mail,:estado,:peso,:cuota,:observaciones)');
  dm.consulta.ParamByName('id_socio').AsInteger:= strtoint(ed_id.Text);
  dm.consulta.ParamByName('ingreso').AsDate:=fechaing.DateTime;
//donde fechaing es el nombre del TDateTimePicker

  dm.consulta.ParamByName('nombre').AsString:=ed_nombre.Text;
  dm.consulta.ParamByName('nacimiento').Asstring:='2008/05/29';
//'2008/05/29' es la variable q uso para q se carge por ahora en mi Bd en  el edit no introdusco nada
  dm.consulta.ParamByName('dni').AsInteger:=strtoint(ed_dni.Text);
  dm.consulta.ParamByName('domicilio').AsString:=ed_domicilio.Text;
  dm.consulta.ParamByName('telefono').AsInteger:=strtoint(ed_telefono.Text);
  dm.consulta.ParamByName('movil').AsInteger:=strtoint(ed_movil.Text);
  dm.consulta.ParamByName('mail').AsString:=ed_mail.Text;
  dm.consulta.ParamByName('estado').AsString:=ed_estado.Text;
  dm.consulta.ParamByName('peso').AsString:=ed_peso.Text;
  dm.consulta.ParamByName('cuota').AsFloat:=strtofloat(ed_cuota.Text);
  dm.consulta.ParamByName('observaciones').AsString:=ed_observaciones.Text;
end;

creo q se deberia hacer un cambio de posocion con la fecha por ej en el TDateTimePicker el formato de fecha es (dd/mm/yyyy) y lo q se tendria q hacer es (yyyy/mm/dd) para q se agrege en la bd de mysql por q creo q mysql la fecha esta en formato de estado unidos algo por el estilo pero no se como hacerlo

egostar 09-06-2008 04:25:38

Hola, yo creo que lo que le hace falta es indicarle los campos que se van a insertar.....

Código SQL [-]

INSERT INTO socios(id_socio, ingreso, nombre, nacimiento, dni, domicilio, telefono, movil, mail, estado, peso, cuota, observaciones)
VALUES(:id_socio, :ingreso, :nombre, :nacimiento, :dni, :domicilio, :telefono, :movil, :mail, :estado, :peso, :cuota, :observaciones)

Salud OS

matabyte 09-06-2008 05:11:49

Buenas.

Lo que tienes que hacer es cambiar el formato de la fecha a la americana, intenta declarar el tipo de formato de fecha a tipo americano y luego a convertir la fecha. A parte, intenta ingresar el campo de fecha como una cadena y no como tipo AsDate, ya que así te ahorrarás muchos problemas.:

Código Delphi [-]
 ShortDateFormat:='yyyy/mm/dd';

 dm.consulta.ParamByName('ingreso').AsString:=DateToStr(fechaing.DateTime);

A parte, como dice [egostar], te falta de poner la definición de los campos de la tabla. Yo mejor pondría toda la sintaxis en el comando de SQL y olvidarse del "ParamByName" :D

calistian 09-06-2008 19:20:07

voy a implementar sus consejos
 
Hola muchachos bueno ahora mismo voy a probar lo que me aconsejaron si no funciona les comento y si funciona tmb les voy a decir :)

calistian 09-06-2008 20:09:48

problema
 
Bueno muchachos como soy novato no entiendo cuando me dicen q declare esto shortdateformat:='yyyy/mm/dd'; en donde lo hago?
Código:

unit Ualta_socio;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, ComCtrls,Umodulo;

type
  Talta_socios = class(TForm)
    id_socio: TLabel;
    ingreso: TLabel;
    nombre: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    ed_dni: TEdit;
    ed_id: TEdit;
    ed_nombre: TEdit;
    ed_domicilio: TEdit;
    ed_telefono: TEdit;
    ed_movil: TEdit;
    ed_cuota: TEdit;
    ed_mail: TEdit;
    ed_peso: TEdit;
    ed_observaciones: TEdit;
    bregistrar: TBitBtn;
    bmodificar: TBitBtn;
    beliminar: TBitBtn;
    bsalir: TBitBtn;
    StaticText1: TStaticText;
    Label3: TLabel;
    Label14: TLabel;
    ed_estado: TComboBox;
    ed_ingreso: TEdit;
    ed_nacimiento: TEdit;
    fechaing: TDateTimePicker;
    procedure bsalirClick(Sender: TObject);
    procedure preparo_altas_socios;
    procedure bregistrarClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  alta_socios: Talta_socios;

implementation

{$R *.dfm}

procedure Talta_socios.bsalirClick(Sender: TObject);
begin
  close;
end;
procedure talta_socios.preparo_altas_socios;
begin
  dm.consulta.Close;
  dm.consulta.SQL.Clear;
  dm.consulta.SQL.Add('insert into socios values(:id_socio,:ingreso,:nombre,:nacimiento,:dni,:domicilio,:telefono,:movil,:mail,:estado,:peso,:cuota,:observaciones)');
  dm.consulta.ParamByName('id_socio').AsInteger:= strtoint(ed_id.Text);
  dm.consulta.ParamByName('ingreso').AsString:=DateToStr(fechaing.Date);
  dm.consulta.ParamByName('nombre').AsString:=ed_nombre.Text;
  dm.consulta.ParamByName('nacimiento').Asstring:='2008/05/29';
  dm.consulta.ParamByName('dni').AsInteger:=strtoint(ed_dni.Text);
  dm.consulta.ParamByName('domicilio').AsString:=ed_domicilio.Text;
  dm.consulta.ParamByName('telefono').AsInteger:=strtoint(ed_telefono.Text);
  dm.consulta.ParamByName('movil').AsInteger:=strtoint(ed_movil.Text);
  dm.consulta.ParamByName('mail').AsString:=ed_mail.Text;
  dm.consulta.ParamByName('estado').AsString:=ed_estado.Text;
  dm.consulta.ParamByName('peso').AsString:=ed_peso.Text;
  dm.consulta.ParamByName('cuota').AsFloat:=strtofloat(ed_cuota.Text);
  dm.consulta.ParamByName('observaciones').AsString:=ed_observaciones.Text;
end;

procedure Talta_socios.bregistrarClick(Sender: TObject);
begin
  if application.MessageBox('Se agregara el siguiente registro a la base de datos ¿Esta seguro?','Alerta',MB_ICONEXCLAMATION+MB_OKCANCEL)=MROK
  then
    begin
      preparo_altas_socios;
      dm.consulta.ExecSQL;
      showmessage('Se guardaron los datos con exito');
      ed_id.Text:='';
      ed_ingreso.Text:='';
      ed_nombre.Text:='';
      ed_nacimiento.Text:='';
      ed_dni.Text:='';
      ed_domicilio.Text:='';
      ed_telefono.Text:='';
      ed_movil.Text:='';
      ed_mail.Text:='';
      ed_estado.Text:='';
      ed_cuota.Text:='';
      ed_observaciones.Text:='';

    end
    else
      alta_socios.ModalResult:=mrnone;
end;

end.

ese es mi codigo entero para la parte de alta de socios por otra parte todo anda ala perfeccion el uncio problema como les digo es la fecha

matabyte 10-06-2008 04:38:29

Pues el shortdateformat es una variable del sistema que puedes modificar para cambiar el formato de la fecha (para todos los tipos Tdatetime). Usando esta cadena haces que la fecha sea mostrada en año/mes/día (la fecha americana). Probablemente tu sistema tiene por defecto la fecha de tu país día/mes/año (Delphi utiliza por defecto la de windows).

Por este código antes de poner la fecha y si luego quieres utilizar la tuya, puedes restaurarla a la original de esta forma:

Código Delphi [-]
shortdateformat:='yyyy/mm/dd';
dm.consulta.ParamByName('ingreso').AsString:=DateToStr(fechaing.Date);
shortdateformat:='dd/mm/yyyy';

Caro 10-06-2008 05:50:22

Hola calistian, sin la definición de los campos debería funcionar, claro que si quieres lo pones, yo lo hago de esta forma para mysql y me funciona.

Código Delphi [-]
  dm.consulta.ParamByName('ingreso').AsDate:=fechaing.Date;
  //o
  dm.consulta.ParamByName('ingreso').AsString:=FormatDateTime('mm/dd/yyyy', fechaing.Date);
  //o el formato que tu le estas dando que también funciona de esa manera
 dm.consulta.ParamByName('ingreso').AsString:=FormatDateTime('yyyy/mm/dd', fechaing.Date);

Saluditos

santi33a 10-06-2008 13:18:02

La verdad es que cada cual lo hace como quiere por eso me gusta la computación siempre hay muchas variantes el problema es encontrar la mas optimas, en mi caso para la entrada de fechas siempre uso los TDateTimePicker y le dejo a delphi como pase los parametros
ejemplo:
Código Delphi [-]
 dmRave.pPIRevUH.Parameters.ParamByName('@fecha').Value := TDateTimePicker1.Date

y en caso que tenga que usarlo en cadena uso el formato añomesdia
Código Delphi [-]
 dmRave.pPIRevUH.Parameters.ParamByName('@fecha').Value := '20080610';

calistian 10-06-2008 16:32:58

Problema solucionado
 
hola gente buena ya pude solucionar mi problema y aclarar todas mis dudas gracias a ustedes aplique la idea de matabyte, la de caro ,y probe en otro proyecto la de santi33a y si me funcionaron desde ya muchas gracias, si tengo otra duda voy a pasar por aqui !!

saludos, garcias :D


La franja horaria es GMT +2. Ahora son las 10:08:39.

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