PDA

Ver la Versión Completa : Consulta con and o or


Ivan_25
04-11-2005, 12:13:29
Hola a tod@s de nuevo!!. Mi pregunta es: ¿Como puedo hacer para que al realizar una consulta el usuario pueda elegir si utilizar and o or para buscar por dos campos distintos?. Tengo una conexion a base de datos con ADO utilizando builder c++. Gracias a tod@s.

Zeta
04-11-2005, 12:25:13
Podrías usar un RadioGroup con dos opciones:
Si el usuario elije la primera hacés la consulta por AND
Si el usuario elije la segunda hacés la consulta por OR
Y listo

Ivan_25
04-11-2005, 12:59:14
Gracias por la respuesta. Tengo otro problemilla, a ver si sabes resolverlo.
Tengo dos campos de busqueda que son codigos, y los guardo en la base de datos como Texto. El tema es que al hacer la busqueda por los dos campos con un between me falla porque between requiere enteros. ¿Puedo solucionar esto sin tocar la base de datos?.

Un saludo y gracias.

Rabata
04-11-2005, 13:50:12
primero nos vendría muy biensaber en k base de datos estas trabajando

De todas formas podrías probar si no te funciona un between, con >= y <=

Ejemplo:

a between 'a' and 'z' <--------> a >= 'a' and a <= 'z'

Intentalo y nos comentas

Ivan_25
07-11-2005, 08:47:55
El problema eran los espacios entre el operador AND y los valores de busqueda. Quedaría asi:

cod1 = ECod1->Text.Trim();
cod2 = ECod2->Text.Trim();
cadena = "Select * from candidatos where id between ";
cadena = cadena + cod1;
cadena = cadena + " AND ";
cadena = cadena + cod2;
ADOQConsulta->SQL->Clear();
ADOQConsulta->SQL->Add(cadena);
FPrincipal->DSListacandidatos->DataSet = ADOQConsulta;
ADOQConsulta->ExecSQL();
FPrincipal->DSListacandidatos->DataSet = ADOQConsulta;
FPrincipal->ADOQListacandidatos->Active = true;
FPrincipal->DSListacandidatos->DataSet = ADOQConsulta;

alt126
07-11-2005, 09:17:40
buenas perrako!!

Una consulta con parametros:


Consulta->SQL->Clear();
Consulta->SQL->Add("SELECT campo FROM tabla WHERE campo1=:a AND campo2=:b;");
Consulta->Params->Items[0]->AsString = "condicion campo1";
Consulta->Params->Items[1]->AsString = "condicion campo2";
Consulta->ExecSQL();
Consulta->Active=true;

Si pruebas la consulta en access, te apareceran 2 ventanillas pidiendote 2 datos..."a" y "b"...y segun lo que pongas ahi...pues te hara la consulta con unos datos u otros. En mi opinion asi es bastante mas facil que intercalar dentro de la consulta los componentes, pero ya tu mismo...

Ademas los parametros pueden ser enteros para hacer comparaciones:


....
Consulta->Params->Items[0]->AsInteger = 123;
Consulta->Params->Items[1]->AsInteger = Edit1->Text.ToInt();
...

Un saludo

Antonio

Ivan_25
07-11-2005, 09:45:00
Es que asi como tu dices no me funciona. Lo he probado, pero primero, Items no puede ser un vector, y segundo no tiene la propiedad AsString, o por lo menos a mi no me tira asi. Gracias de todos modos.

alt126
07-11-2005, 09:55:02
Pon en la ayuda tquery...y busca la propiedad "params"...alli puedes ver un ejemplo de uso: (yo uso bc++ 5 pero en la 6 tambien tendria que estar).



The following code runs an insert query to add a record for Liechtenstein into the country table.
Query2->SQL->Clear();
Query2->SQL->Add("INSERT INTO COUNTRY (NAME, CAPITAL, POPULATION) ");
Query2->SQL->Add("VALUES (:Name, :Capital, :Population) ");
Query2->Params->Items[0]->AsString = "Liechtenstein";
Query2->Params->Items[1]->AsString = "Vaduz";
Query2->Params->Items[2]->AsInteger = 420000;
Query2->ExecSQL();

Un saludo

Antonio

Ivan_25
07-11-2005, 10:46:43
A ver, como le puedo pasar una cadena a otro formulario?Te explico. Tengo un formulario de busqueda, y para hacer la sentencia sql quiero que el usuario pueda elegir AND u OR, de manera que hago llamadas a una funcion andor que me abre un formulario nuevo donde quiero mostrar la cadena que llevo hasta ese momento, y tengo 2 botones and u or. Como paso la cadena del formulario 1 al formulario andor?. Me entiendes. Enga neeeeeeeeeeeeeen!!!!!.

alt126
07-11-2005, 11:22:01
Pues varias maneras...


Al principio del formulario DESTINO...tienes que poner un include al formulario ORIGEN...algo asi:


#include "uORIGEN.h"

De esta manera, ya puedes acceder a todas sus variables y componentes de la siguiente manera:

Nombre_Formulario->LOQUEQUIERAS (o un componente o una variable o como quieras)

Entonces si la cadena esa la tienes en un edit, pos:

Formulario->Edit1->Text

Si esta en una cadena, la cadena la tendras que declarar GLOBAL en el .h del formulario ORIGEN, y entonces desde el DESTINO:

Formulario->cadena