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)
-   -   Problema busqueda varios campos (https://www.clubdelphi.com/foros/showthread.php?t=81211)

elrodrix 22-10-2012 05:12:25

Problema busqueda varios campos
 
BASE DE DATOS: MYSQL
DELPHI 5

Que tal? .. quiero hacer la busqueda de varios campos.

Primero quise realizar la busqueda por medio de un Query ... usando un ADOQuery ... el problema es que tengo un datetimepicker que guardo la fecha en formato DD-MM-AAAA ... para insertar la fecha hago una conversion, ya que MYSQL permite el formate AAAA-MM-DD ... entonces cuando lanzo un SELECT no me devuelve NADA porque el formato de la fecha se manda como DD-MM-AAAA ... y la propiedad ADOQuery.SQL.ADD('') no me permite realizar la conversion de formato. ENTONCES COMO HAGO'?


Se me ocurrio hacer la busqueda con un LOCATE. Pero resulta que la busqueda la tengo que hacer preguntando varios campos (mi tabla a consultar tiene multiples llaves primarias), y mi problema es que no se como se hace


Lei que hay que mandar una variable, asi como Table.Locate('Mes;Dia',VarArrayof([Mes,Dia]),[]) ... pero no tengo idea como se crea el array y como se le asigna valores.

Mi idea seria crear el Array, y mandarle como valor lo que hay en un edit. Por ej

Variable1:=Edit1.text
Variable2:=DateTimePicker1.date
Variable3:=strtoint(Edit2.text)

Algo asi pienso que es, como se hace esto en un array para mandarlo como parametro a un LOCATE??

GRACIAs.

ecfisa 22-10-2012 08:02:15

Hola elrodrix y bienvenido a Club Delphi :)

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Saludos y gracias por tu colaboración.

elrodrix 22-10-2012 15:12:17

Cita:

Empezado por ecfisa (Mensaje 447596)
Hola elrodrix y bienvenido a Club Delphi

Como a todos los que se inician te invitamos a que leas nuestra ............

Saludos y gracias por tu colaboración.

Muchas gracias. Mientras voy leyendo no podrias aunque sea tirar una idea de como podria solucionar mi problema? ... saludos

Al González 22-10-2012 17:26:10

Cita:

Empezado por elrodrix (Mensaje 447594)
[...] entonces cuando lanzo un SELECT no me devuelve NADA porque el formato de la fecha se manda como DD-MM-AAAA [...]

Ayudaría sobremanera que nos mostraras cómo lanzas ese Select (un trozo de código vale más que mil tweets). ;)

Quizá sólo te falta hacer la conversión al formato 'yyyy-mm-dd' usando la función FormatDateTime. :)

bosster_018 22-10-2012 22:11:32

Tal como lo menciona Al_Gonzalez....

Como ejemplo con un DateTimePicker y un Boton

en el boton pones el formatDateTime:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  fecha : string;
begin
  fecha:= FormatDateTime('yyyy/mm/dd',DateTimePicker1.Date);
  ShowMessage(fecha);
end;

Con esto le das el formato que quieras a tu fecha, muy bueno para trabajar con base de datos por ejemplo MYsql y Sql

Saludos!

elrodrix 23-10-2012 20:14:10

Cita:

Empezado por bosster_018 (Mensaje 447690)
Tal como lo menciona Al_Gonzalez....

Como ejemplo con un DateTimePicker y un Boton

en el boton pones el formatDateTime:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  fecha : string;
begin
  fecha:= FormatDateTime('yyyy/mm/dd',DateTimePicker1.Date);
  ShowMessage(fecha);
end;

Con esto le das el formato que quieras a tu fecha, muy bueno para trabajar con base de datos por ejemplo MYsql y Sql

Saludos!

Hoy voy a probar como dices y comento ... ahora con LOCATE de ADOTable como podria mandar como parametro para consultar por 3 campos?

Casimiro Notevi 23-10-2012 20:36:29

Cita:

Empezado por bosster_018 (Mensaje 447690)
Con esto le das el formato que quieras a tu fecha, muy bueno para trabajar con base de datos por ejemplo MYsql y Sql

SQL no es ninguna base de datos, es un lenguaje.

cancun 23-10-2012 20:55:58

Hola


La función Locate sería así:

Código:

if Table1.Locate('Campo1;Campo2;Campo3',VarArrayOf([Valor1,Valoe2,Valor3]),[]) then //Encontrado

Para hacer una condición por varios campos se usa el operador AND

Código:

where Campo1='xxxx' And Campo2>10 And Campo3=200 And Campo4<>'1'
Para las fechas puedes usar esta función

Código:

function AnsiQuotedDate(Fecha:TDateTime):String;
begin
  Result:=''''+IntToStr(Year(Fecha))+'-'+IntToStr(Month(Fecha))+'-'+IntToStr(Day(Fecha))+'''';
end;

y la llamas de este modo

Código:

  Tabla1.ParamByName('Fecha').AsDate:=AnsiQuotedDate(DateTimePicker1.Date);

  Query1.SQL.Strings[3]:='Where Fecha='+AnsiQuotedDate(DateTimePicker1.Date);


Bueno espero te sirva de algo esta información

Saludos

bosster_018 26-10-2012 21:52:43

Cita:

Empezado por Casimiro Notevi (Mensaje 447781)
SQL no es ninguna base de datos, es un lenguaje.


No me di cuenta de mi error.... :p

Ahora que leo de nuevo las definiciones de cada palabra... Lo diré de nuevo:

Cita:

Bueno para utilizar con gestores de Base de datos MySQL y SQL server
Ya que el SQL es un lenguaje de consulta estructurado....

Cada vez aprendo más.... Gracias a ustedes... :D

Saludos!

Casimiro Notevi 26-10-2012 23:22:29

Cita:

Empezado por bosster_018 (Mensaje 448081)
No me di cuenta de mi error.... :p Bueno para utilizar con gestores de Base de datos MySQL y SQL server

Te refieres a MS Sql server, ¿verdad? :D

Al González 26-10-2012 23:35:56

Cita:

Empezado por Casimiro Notevi (Mensaje 448089)
Te refieres a MS Sql server, ¿verdad? :D

O quizá se refiere a Firebird SQL Server, que también es popular. :)

Casimiro Notevi 27-10-2012 00:46:58

Cita:

Empezado por Al González (Mensaje 448090)
O quizá se refiere a Firebird SQL Server, que también es popular. :)

El departamento de marketing de Microsoft hizo una buena jugada en poner a su RDBMS de nombre "SQL Server", así todas las personas que no entienden mucho del tema piensan que "SQL server" es el de microsoft, y que el resto son "otra cosa".

Si llegan a ser fabricantes de coches, le ponen de nombre "coche" y así todo el mundo asocia "coche" con el MS coche :)
Y los demás no son "coches", son vehículos a motor con 4 ruedas y volante, de nombre ford, renault, nissan, etc. pero el auténtico "coche" es el de microsoft, el "MS coche" :)

roman 27-10-2012 00:55:04

Pues eso tiene sus antecedentes históricos desde que Estados Unidos decidió llamarse así, Estados Unidos de América. De esa forma identifican todo el continente con ellos, como se desprende de la doctrina Monroe.

No es de extrañar que sus empresas hagan cosas similares.

// Saludos

Casimiro Notevi 27-10-2012 01:08:43

Tienes razón, creo que el nombre oficial es "Estados Unidos Mexicanos", situado en América del Norte y que limita al norte con los "Estados Unidos de América".
Entonces México también es "Estados Unidos de América", porque está en América. Y entonces también es "norteamérica".

roman 27-10-2012 01:12:38

En efecto, el nombre oficial de México es Estados Unidos Mexicanos. Tampoco es que nuestros fundadores hayan sido muy originales :s con eso de Estados Unidos. Pero al menos tenemos el apelativo México de antecedentes prehispánicos.

// Saludos


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

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