Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema insertar fecha (https://www.clubdelphi.com/foros/showthread.php?t=44750)

Nomad 13-06-2007 20:22:30

Problema insertar fecha
 
Hola

Estoy insertando la fecha actual de la siguiente forma:
Código Delphi [-]
sql := 'Insert into FinalProduct(Id,PlantId,OrderId,PackDate,BagsURC,IdCus,IdVar) Values('
+FloatToStr(Inicio)+','+CmbPlanta.Items[CmbPlanta.itemindex]+
','+#39+'K017-3'+#39+','+formatdatetime('dd/mm/yyyy',date)+','
+NBolsas.Text+',107,169'+')';


Pero resulta que cuando voy a SQL server a revisar el dato que inserte, me aparece 01/01/1900, el tipo de datos en la base de datos es DATETIME.

Cuando corro el programa paso a paso, antes de enviar a insertar, reviso la cadena y la fecha va correctamente ej: 13/06/2007, pero sigue insertando 01/01/1900

Gracias y disculpen si redundo, pero he buscado y no encuentro nada como esto en el foro.

Gracias

loxod 13-06-2007 20:36:18

creo que te falta poner el campo fecha entre el caracter #39

sql := 'Insert into FinalProduct(Id,PlantId,OrderId,PackDate,BagsURC,IdCus,IdVar) Values('
+FloatToStr(Inicio)+','+CmbPlanta.Items[CmbPlanta.itemindex]+
','+#39+'K017-3'+#39+','+ #39 + formatdatetime('dd/mm/yyyy',date) + #39 +',' +NBolsas.Text+',107,169'+')';

luisgutierrezb 13-06-2007 23:00:33

si es ms sql server, no hay nada como la fecha en formato iso
YYYYMMDD para que insertes o manejes fechas, independientemente del lenguaje, notese que no lleva - o / es todo pegado

ContraVeneno 14-06-2007 00:43:12

Código Delphi [-]
with TuDataSet do begin
SQL.Add('Insert into FinalProduct(Id, PlantId, OrderId, PackDate, BagsURC, IdCus, IdVar) ');
SQL.Add('Values('+FloatToStr(Inicio)+', '''+CmbPlanta.Items[CmbPlanta.itemindex]+''', ''K017-3'', ');
SQL.Add(''''+ formatdatetime('yyyy-mm-dd',date)+''', '''+NBolsas.Text+''',107,169) ');
...
end;

Código Delphi [-]
With TUDataset do begin
...
SQL.Add('Insert into FinalProduct(ID, PlantID, OrderID, PackDate, BagsURC, IdCus, IDVar)');
SQL.Add('Values( :vID, :vPlantID, :vOrderID, :vPackID, :vBagusURC, :vIDCus, :vIDVar)');
ParamByname('vID').AsFloat := Inicio;
ParamByName('vPlantID').AsString := cmbPlanta.Items[cmbPlanta.ItemIndex];
ParamByName('vOrderID').AsString := 'K017-3';
ParamByName('vPackID').AsDateTime := date;
ParamByName('vBagusURC').AsString := NBolsas.Text;
ParamByName('vIDCus').AsInteger := 107;
ParamByName('vIDVar').AsInteger := 169;
..
ExecSQL;
...
end; // with

vtdeleon 14-06-2007 00:50:51

Para problemas de tipo fecha, lo mejor es usar "Paramentros" en el DataSet. De esa forma le dejas el trabajo sucio a otro.

Código Delphi [-]
sql := 'Insert into FinalProduct(Id,PlantId,OrderId,PackDate,BagsURC,IdCus,IdVar) Values(:Inicio, :Planta, :Orden, :Fecha, :Bolsas, 107,169)';
With Query1 do
begin
  Sql.Text:=sql;
  ParamByName('Inicio').AsFloat:=Inicio;
  ParamByName('Planta').AsString:=CmbPlanta.Items[CmbPlanta.itemindex];
  ParamByName('Orden').AsString:='K017-3';
  ParamByName('Fecha').AsDateTime:=Date;
  ParamByName('Bolsas').AsString:=NBolsas.Text;
  ExecSql;
end;

vtdeleon 14-06-2007 00:51:24

Llegue 7 minutos tarde:(

ContraVeneno 14-06-2007 00:55:23

Si hombre, que cosas, últimamente me les he estado adelantando, jejeje
en fin, me queda una duda... ¿es necesario agregar los apóstrofes (') con el #39?

Código Delphi [-]
ParamByName('Orden').AsString:=#39+'K017-3'+#39;

Según entiendo, al utilizar parámetros, este se encargar de agregárlos. Por lo que la instrucción sería:
Código Delphi [-]
ParamByName('Orden').AsString:='K017-3';
Al menos así funciona en mi delphi 5 ó 10 .

---edito--
ya editaste, jeje

Nomad 14-06-2007 04:55:11

Perfecto
 
Gracias a todos... luego les cuento como me fue...

karlaoax 14-06-2007 15:27:33

Cita:

Empezado por ContraVeneno
en fin, me queda una duda... ¿es necesario agregar los apóstrofes (') con el #39?

Duda, el codigo Ascci #39 para que lo ponen, si es lo mismo utilizar '

Podrian explicarme este codigo, no lo entiendo?

ContraVeneno 14-06-2007 15:36:49

Lo ponen para que en el texto se coloque un apóstrofe y obtener el mismo resultado que se obtiene al usar la función "QuotedStr". En el caso de utilizar parámetros esto no es necesario.

Si no se utilizan parámetros, para obtener una cadena con apóstrofes (como regularmente se utilizan en una consulta en SQL Server), tienes tres opciones:
  • 'campo = '+#39+valor+#39 +','; Resultando en: campo = 'valor',
  • 'campo = '''+valor+''', '; Resultando en: campo = 'valor',
  • 'campo = '+QuotedStr(Valor)+','; Resultando en: campo = 'valor',
Donde la menos recomendable es la primera y la más recomendable es la tercera.

karlaoax 14-06-2007 15:41:22

Gracias Contraveneno por la aclaracion, lo tendre muy en cuenta en la elaboracion de codigo en un futuro :)

Nomad 14-06-2007 15:56:41

Uso de parametros
 
Les cuento que con el uso de parametros se soluciono el problema, gracias

jjmagro 18-12-2007 22:38:29

Y si fuera al revés?
 
Estoy buscando un problema similar: en este tópico ustedes hacen referencia a que capturan una fecha en delphi y en SQL se guarda otra diferente y que lo solucionan mandándole parámetros, ok, perfecto.
Yo tengo un problema inverso: tengo fechas en SQL y necesito verlas en Delphi (las fechas las almacena otra aplicación) y yo cuando me traigo la información de la tabla me trae las fechas distorsionadas (o sea, con otro formato vamos)
Por ejemplo, tengo almacenado el valor 17/12/2007 y en Delphi, cuando me trae ese valor me muestra 28/05/4430 :S
Simplemente conecto a un TTable y muestro la fecha en un formulario en un campo DBEdit
El campo de la fecha en el TTable está como DateTime, en SQL Server 2000 también está como DateTime, y ahora lo que se me dio fue por configurar el BDE Engine para configurar el formato de los alias y todo eso... pero nada ha cambiado
Alguien podría darme algo de luz al respecto por favor?
Muchas gracias gente desde ya por cualquier comentario que puedan hacer para ayudarme...

kuan-yiu 20-12-2007 16:29:17

Asegúrate de que no tengas algún formato extraño de fecha en la definición de la tabla, del grid... asígnale el que necesites (por ejemplo: dd/mm/yyyy)

gerasA 17-01-2008 19:11:28

Hola!
tengo una duda sobre una consulta.
tengo 7 tablas todas con los mismos campos(No.,Fecha,Folio,Peso,Total)
necesito hacer consultas por fecha pero de cada tabla.
Mi pregunta es como cambio el formato de la fecha para poder hacer las consultas, el formato de mis tablas es dd/mm/aaaa lo que hago es esto:
Código Delphi [-]
consulta:='select * from Aluminio where Fecha =';
consulta:=consulta+quotedstr(edit1.Text);
consulta:=consulta+'order by Folio';
Query1.SQL.Clear;
Query1.SQL.Add(consulta);
Query1.Active;
Query1.Open;
Si lo hace pero el usuario tiene que poner diferente formato mm/dd/aaaa, yo kiero ke lo capture dd/mm/aaaa
Gracias

Nomad 17-01-2008 19:58:48

Lo puedes hacer asi...
Código Delphi [-]
consulta:='select * from Aluminio where Fecha = :Fecha order by Folio';
Query1.sql.text := consulta;
Query1.Parameters.ParamByName('fecha').vale := edit1.text
Query1.Active := true;

Solo hay un detalle, depende de la version de delphi que tengas

puede ser que la siguiente linea cambie.

Código Delphi [-]
Query1.ParamByName('fecha').vale := edit1.text

No se le pone el "Parameters"

Espero que le ayude...


gerasA 17-01-2008 20:35:49

Consultas por fecha
 
Estoy usando delphi 7 y ya hice lo que me dices Nomad pero me marka error:Type mismatch in expresion
a la hora de que el usuario captura la fecha y cambie la linea ke me dijiste
Gracias

ContraVeneno 17-01-2008 22:50:46

¿porque diantres pedir una fecha en un TEdit cuando la puedes pedir con un TDateTimePicker?


La franja horaria es GMT +2. Ahora son las 18:16:18.

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