Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-12-2005
Avatar de Pskotler
Pskotler Pskotler is offline
Miembro
 
Registrado: dic 2005
Posts: 12
Poder: 0
Pskotler Va por buen camino
Unhappy 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;
Responder Con Cita
  #2  
Antiguo 08-12-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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;
// Saludos
Responder Con Cita
  #3  
Antiguo 08-12-2005
Avatar de Pskotler
Pskotler Pskotler is offline
Miembro
 
Registrado: dic 2005
Posts: 12
Poder: 0
Pskotler Va por buen camino
Exclamation 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....
Responder Con Cita
  #4  
Antiguo 08-12-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Esto podemos asignárselo a cualquier variable de tipo Integer.

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;
son realmente muy malas. ¿Por qué? Por que condenas eternamente tu aplicación a la interfaz de usuario. Trata de nunca usar sentencias SQL mezcladas con código de la interfaz. En su lugar utiliza parámetros en tus consultas:

Código SQL [-]
SELECT * from Tab where Codigo = :COD

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;
La ventaja es que así tu Query ya no depende en lo absoluto de Edit1, es simplemente un objeto que espera un parámetro y luego se activa.

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
Responder Con Cita
  #5  
Antiguo 08-12-2005
Avatar de Pskotler
Pskotler Pskotler is offline
Miembro
 
Registrado: dic 2005
Posts: 12
Poder: 0
Pskotler Va por buen camino
Question 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;
}
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 20:34:29.


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
Copyright 1996-2007 Club Delphi