FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
#1
|
||||
|
||||
Consulta SQL
buenas. mi problema radica en que cuando quiero que un boton me chequee el contenindo de un Edit para validar un select y hacer la consulta de un codigo por ejemplo...y no se tampoco donde se guarda los resultados de la consulta...el procedimiento que sigo es el siguiente..y el problema esta en la parte de Codigo = Edit1->Text no se como hacerlo..si me pueden dar una manito gracias
void __fastcall TForm1::Button1Click(TObject *Sender) { Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add("SELECT * from Tab where Codigo = Edit1->Text"); Query1->ExecSQL(); Query1->Active=true; |
#2
|
||||
|
||||
Pues casi lo tienes todo. El problema es que al poner
"SELECT * from Tab where Codigo = Edit1->Text" C++ interpreta literalmente los caracteres "Edit1->Text" pues todo lo que esté entre " no se evalúa. Entonces debes primero evaluarlo y luego concatenarlo con el resto de la cadena: Código:
"SELECT * from Tab where Codigo =" + Edit1->Text; |
#3
|
||||
|
||||
Gracias
Ahora el tema es que yo necesito que me capture en el Edit solamente datos numericos y saber donde me guarda la informacion el select... para despues poder mostrarla mediante alguna ventana o cualquier medio...pero no se donde me guarda el tquery la consulta que yo hago.. .....
otra cosa... como puedo usar la funcion ToInt..quizas de esa forma yo pueda pasar el resultado de el edit que esta en AnsiString a Enteros y asi directamente direccionarlo con la variable a la consulta.... |
#4
|
||||
|
||||
Bueno a ver, advierto que yo no manejo C. Sólo sé que cambiando . por -> se ve muy semejante a Pascal
Un Query es un DataSet. Un DataSet es una representación de datos tabulares (filas y columnas), normalmente provenientes de una base de datos. Pero para acceder a los datos no podemos hacerlo como si de una matriz o arreglo bidimensional se tratase. Un DataSet sólo muestra una fila a la vez. Para acceder a las distintas filas de un DataSet utilizamos su método Next que pasa a la siguiente fila. Sabemos que hemos llegado al final cuando su propiedad EOF es true. Para acceder a las distintas celdas (campos) de la fila actual usamos el método FieldByName del DataSet. El método recibe el nombre del campo y devuelve un objeto TField. Un TField es la representación genérica de un campo. Como un campo puede ser de muchos tipos de datos, debemos indicar cuál es el que esperamos. Esto lo hacemos usando una de sus propiedades AsTipo: AsInteger, AsString, AsBoolean, AsFloat, etc. En resumen, para acceder, por ejemplo, a un campo entero de la fila actual usamos: Código:
DataSet.FieldByName('campo').AsInteger Si la consulta SQL que está haciendo sólo te devuelve un registro entonces apenas actives el Query, el renglón activo será ese y podrás usar FieldByName para acceder a su valor. Pero recuerda, ¿cuál valor? Tu consulta pide todos los campos así que en realidad son varios valores. En FieldByName especificas cuál quieres. Por otra parte, construcciones como: Código:
"SELECT * from Tab where Codigo =" + Edit1->Text;
Los dos puntos antes de COD indican al Query que COD es un parámetro que debe llenarse antes de activar la consulta. Para llenarlo usas: Código:
Query.ParamByName('COD').AsInteger = Edit1->Text; Si el parámetro lo tomas de un Edit u otro control o de una variable, es indistinto, permitiéndote así, manipular el código de la interfaz de usuario sin alterar para nada los objetos encargados de las consultas. // Saludos |
#5
|
||||
|
||||
Problemas con el parametro
Esto es lo mejor que pude hacer y sin embargo sigo tiene problemas con la conversion de el edit a entero...aparece un error y me confunde. el problema es con el parametro aparentemente
void __fastcall TForm1::Button1Click(TObject *Sender) { Query1->Close(); Query1->ParamByName('COD')->AsInteger = StrToInt(Edit1->Text); Query1->SQL->Clear(); Query1->SQL->Add("SELECT * from Tab where Codigo = :COD"); Query1->ExecSQL(); Query1->Active=true; } |
|
|
|