Realizar consultas sql en power bulder

Bueno mi consulta es la siguiente.
He desarrollado una aplicación que esta orientada al seguimiento de correspondencia
en el mismo incluyo un menu que permite realizar consultas para verificar el estado de los documentos es en esta parte donde mi experiencia es limitada en cuanto a los siguientes aspectos
la idea es escribir un parámetro cualquiera en un campo de texto y que este me retorne una lisa con totos los documentos que posean estos parámetros por ejemplo si yo estoy buscando el estado actual de un documento que esta relacionado a una invitación a Canadá
tendría que escribir Invitación y que muestre todos los documentos del tipo invitación y lo mismo si busco canadá que me retorne todos lo documentos que posean la cadena de texto Canadá
se que la instrucción de consulta LIKE en SQL permite realiazar este tipo de consultas mi problema es plasamar esta rutina en mi aplicación
no se si fui claro pero esta es mi duda y de ante mano les agradezco. Mi correo es [url|mailto:(xxxxxx)](xxxxxx)[/url]

1 Respuesta

Respuesta
1
Dime quieres mostrar los datos según el parámetro en un datawindow.?
O como es lo que quieres hacer, por lo que entendí quieres hacer uso del SQL pero dime, ¿el resultado donde lo vas a mostrar?
Aclarame estos puntos para poder ayudarte.
Si bueno disculpas olvide eso inmediatamente lego de realizar la consulta deseo plasmar los resultados en un data windows y en el mismo mostrar todos los resultados de la búsqueda gracias
Entonces puedes crear el datawindow con todos los campos de la tabla que deseas mostrar, pero con solicitando un parámetro.
en el where del sql del dw pones:
where condicion like :as_dato
Entonces cuando hagas el retrieve, pones
ls_dato = '%'+datos+'%'
dw_1.Retrieve(ls_dato)
Cualquier consulta solo pregunta.
si bueno lo que sucede es que como te dije deseo capturar lo que escriba en el campo de texto (sea cual fuese el parametro de busqueda )y mostrar todo en el data windows
ahora bien la consulta
where condicion like :as_dato   as_dato es el parametro que busco verdad???
Eso no lo entiendo bien...
y
ls_dato = '%'+datos+'%' dw_1.Retrieve(ls_dato)   tendria que ir en un boton??
Para el momento que le indique recuperar me retorne los datos que necesito
disculpa toda esta aclaración es solo que como te dije no domino muy bien estra situación
Si ingresas el dato en un sle_1, entonces para capturarlo haz lo siguiente:
En el evento clicked del botón.
String ls_dato
ls_dato = '%' + sle_1.text + '%'
dw_1.Retrieve(ls_datos)
Eso es todo.
Cualquier otra duda solo pregunta.
Agregue el código que me pasaste pero al compilar genera un error
  ---------- Compiler: Errors
w_segdoc.pbl(w_ref).cb_1.clicked.3: Error C0015: Undefined variable: ls_datos
---------- Finished Errors
No tienes definida la variables ls_datos
Tienes de declararla de tipo string
String ls_datos
Te comento que intente lo que me dijiste y no resulta no se si esta fallando el dw
No entiendo...
¿El dw se queda tal como esta con su consulta o como quedaría?
El dw tiene que tener los campos que desees, pero adicionale una condición, es decir en el where colócale el campo por la que quieres realizar el filtro.
Una vez hecho eso, en el botón buscar pones el script
String ls_dato
ls_dato = '%' + sle_1.text+'%'
El sle_1.text es donde colocas el dato a buscar.
Por si las dudas enviame el script de tu dw para ver cual es el inconveniente.
Ok el where del dw que clase de consulta requiere utilizo el like o que datos contendría
¿como quedaria el where del dw?
Ok el where del dw que clase de consulta requiere utilizo el like o que datos contendría
¿como quedaria el where del dw?
Lo que puedes hacer es lo siguiente:
Crea tu dw sin ningún where es decir solo el Select y From, luego en el evento constructor de tu dw, colocas:
is_sqlactual = GetSQLSelect()
Luego en el evento clicked del boton mostrar colocas:
String ls_sqlnuevo
ls_sqlnuevo = is_sqlactual+" where campo like %'"+is_condicion+"%'"
dw_1.SetSqlSelect(is_sqlnuevo)
dw_1.Retrieve()
La variable is_sqlactual es de tipo string y declarado en una variable de instancia.
Y como capturo el texto que intrdusco
en el l %'"+is_condicion+"%'" donde lo recibo
Se supone que el texto tu lo ingresas en un sle_1.text, por tanto en el evento clicked del botón buscar ahí debes de colocarlo, ejm:
is_condicion = sle_1.text.
Lógicamente debes ponerlo antes de asignarle el valor a la variable ls_sqlnuevo.
Disculpa la verdad es que me confundí como al principio me explicaste otro modo y luego este en fin
Para y no hacerte perder el tiempo más con estas cosas es posible que me indiques exactamente los pasos que debo seguir para lograr esta situación y de ante mano gracias por ayudarme y disculpas por tantas molestias
Atentamente: Guillermo
No es molestia amigo, para eso estamos para aclarar las dudas.
Mira, debes poner esto exactamente donde te lo indique.
Creas una variable de instancia de tipo string:
String is_sqlactual,is_condicion
Luego crea tu dw sin ningún where es decir solo el Select y From, Posteriormente en el evento constructor de tu dw, colocas:
is_sqlactual = GetSQLSelect()
En el evento clicked del boton mostrar colocas:
String ls_sqlnuevo
//Asumiendo que la condicion q pìensas buscar lo escribes en un sle_1
is_condicion = sle_1.text
ls_sqlnuevo = is_sqlactual+" where campo like %'"+is_condicion+"%'"
dw_1.SetSqlSelect(is_sqlnuevo)
dw_1.Retrieve()
Eso sería todo.
Pruébalo y cualquier problema o duda que tengas me informas. Caso contrario cierra la pregunta.
Ok
La declaración de las variables de instancia las debo declarar donde específicamente sobre el windows o sobre el dw en el sle. esa es una duda.
otra al momento de relaizar la consulta que se almacena en una variable 
 ls_sqlnuevo = is_sqlactual+" where campo like %'"+is_condicion+"%'"
is_condicion se queda tal cual por que adquiere el valor del sle verdad
Bueno gracias por tu tiempo y por la paciencia con esta ultima consulta me despido
atentamente:Guillermo Terrazas
Las variables de instancia se declaran en el formulario (windows como tu lo dices).
La variables is_condicion se queda tal cual.
Que tal de nuevo yo...
Mira intente con todo lo que me indicaste y la verdad no se que esta mal
1º me pide declarar las variables de istancia en todas las ventanas y botones donde las uso
2º tu crees que sera bueno manejar dos botones, ¿uno dónde diga buscar y otro mostrar?
3º bueno al final realizo la consulta where hacia un (campo ) que se llama referencia
pero no resulta.
4º y por ultimo al correr l programa  sale un mesaje con lo siguiente
dw windows error Database transaccion  Information not available Call set trans or set TransObjet function
help........
1) La variable de instancia solo se puede usar dentro del mismo formulario.
2) No es necesario 2 botones, con uno basta y sobra.
3) Esta parte enviame el código para ver cual puede ser el problema.
4) En el constructor del dw, coloca:
SetTransObject(SQLCA).
Si puedes enviame el código de como lo estas haciendo, para ver cual es el problema, así como el sql que tiene tu dw.
Bueno
Medio que ya quiere
solo me sale un error de sitaxis en la fila de la consulta en where
ls_sqlnuevo = is_sqlactual+" where campo like %' " +is_condicion+ " % ' "
Bueno aquí es donde te digo que la referencia que hago la realizo al campo referencia digamos pero no resulta
gracias.
Claro está mal la sintaxis:
ls_sqlnuevo = is_sqlactual+" where campo like %' " +is_condicion+ " % ' "
Debe ser así:
ls_sqlnuevo = is_sqlactual+" where campo like '% " +is_condicion+ " % ' "
Te cuento que sigue el problemas el mensaje es así
Sintaxis incorrecta cerca de la palabra clave 'where'.
Bueno la verdad no se que más hacer
Por si las dudas este es el código que uso sobre el botón buscar
String ls_sqlnuevo
String is_sqlactual,is_condicion
is_condicion = sle_1.text
ls_sqlnuevo = is_sqlactual + " where NRODOCUMENTO like ' % " + is_condicion + " % ' "
dw_1.SetSqlSelect(ls_sqlnuevo)
dw_1.Retrieve()
Haber haz algo coloca lo siguiente para ver que te esta mostrando en is_sqlactual y en ls_sqlnuevo
despues de ls_sqlnuevo= .......
Coloca lo siguiente:
Messagebox("parte 1", is_sqlactual)
Messagebox("parte 2", ls_sqlnuevo)
Captura los 2 mensjes q te muestra y me lo pasas para ver cual es el problema.
Nota asegurate que el campo NRODOCUMENTO es correcto y mira de q tipo de dato es.
Hola de nuevo
Bueno para el mensaje 1 no sale nada (supongo que esta bien)
En el mensaje 2 sale lo siguiente (where cite like'%mpd%') con lo que entiendo que si captura el dato que le envío
pero luego sale un mensaje error:
DataWondows Error
Select Error: SQLSTATE=37000
[Microsoft][ODBC SQL Server Driver] [SQL Server] Sintaxis incorrecta cerca de la palabra cleve 'where'.
Y bueno eso es todo lo que sucede
Gracias.
Si no te muestra ningún mensaje en la uno, eso quiere decir que si hay problemas, el motivo es el siguiente:
Is_sqlactual tiene que estar declarado como variable de instancia y no dentro de tu botón buscar.
Luego en el evento constructor de tu dw, colocas:
is_sqlactual = GetSQLSelect()
Corrige eso, y ya no te debe salir ese problema.
Tienes razón
ahora la primera parte muestra un mesage
PBSELECT (VERSION(400)TABLE(NAME="documento")COLUMN(NAME="documento.nrodocumento")COLUM(NAME="documento.referencia")COLUMN(NAME="documento.cite")COLUMN(NAME="documento.remitente"))
la segunda ventana algo similar pero
con la cosulta where
 y por ultimo un error en el data windows
Database transaction information not available.
call set trans or set transObjet function.
Gracias...
Debes agregar en el evento constructor del dw:
SetTransObject(sqlca)
Luego comenta los messagebox y haz la prueba.
Lo siento
Sale un error
Select Error: SQLSTATE = 37000
[Microsoft][ODBC sql server] [sql server] Linea 1: sintaxis incorrecta cerca de 'version'.
Cambia el código
is_sqlactual = SetSQLSelect ()
por este
is_sqlactual = Describe("Datawindow.Table.Select")
Y haz la prueba.
Sigue sale el mismo error
Bueno parece que tienes problema a la hora de recuperar el sql del dw, ya que no te debería mostrar ningún inconveniente, pero para salir del apuro, haz lo siguiente:
Ingresa al dw en modo diseño, luego en la barra de herramientas haz clic en SQL, luego copia el select que te muestra el dw.
Una vez que tengas el select con el from, asígnale a tu variable is_sqlactual, ejm:
is_sqlactual = "SELECT campo1,campo2,... FROM tabla "
Observa que al final de indicar la tabla dejo un espacio en blanco eso es para que no se mezcle con el WHERE .
Ahora si no debes tener ningún inconveniente.
sIIIIIIIIIIIIII
Va bien, una consultilla más el tipo de dato que introduzca en la búsqueda tiene que ver algo con que si es un numero o un carácter.
Porque supongo que el where quedaría según el dato que busque ...
?
Claro que tiene que ver, en estos momentos el where solo acepta caracteres.
Puedes finalizar la pregunta.
Si claro lo siento
Bueno gracias por todo tu tiempo y tu atención
Atentamente:G
No tienes nada que agradecer.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas