Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Instruccion substring de mysql

Estas en el tema de Instruccion substring de mysql en el foro de Visual Basic clásico en Foros del Web. Hola mis amigos foristas... Quisiera que me hecharan una mano con la funcion de cadenas de MySQL porque kiero consultar de la tabla_departamento ordenados por ...
  #1 (permalink)  
Antiguo 26/03/2009, 19:05
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
Instruccion substring de mysql

Hola mis amigos foristas...

Quisiera que me hecharan una mano con la funcion de cadenas de MySQL porque kiero consultar de la tabla_departamento ordenados por el id_departamento pero resulta que cuando aplico el ORDER BY me lo ordena asi:

dpto-1,
dpto-10,
dpto-2,
dpto-20,
dpto-3,
dpto-30

pero kisiera que me salga asi:

dpto-1,
dpto-2,
dpto-3,
dpto-10,
dpto-20,
dpto-30

estuve leyendo por ahi... y me consegui que podria aplicar algo como esto:

ORDER BY SUBSTRING (tabla_departamento.iddepartamento,5)

pero me sale error cuando lo corro en MySQL... Porfis me ayudan?

Saludos
  #2 (permalink)  
Antiguo 26/03/2009, 20:29
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Instruccion substring de mysql

Hola
Prueba esto
Código sql:
Ver original
  1. ORDER BY  CAST(SUBSTRING(tabla_departamento.iddepartamento,6) AS  UNSIGNED);
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 27/03/2009, 08:11
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Instruccion substring de mysql

Hola... Gracias por Responder...

Sabes que probe tu sugerencias de la siguiente manera:

SELECT `tabla_departamento`.`id_departamento`
FROM `tabla_departamento`
WHERE `tabla_departamento`.`dpto_id_departamento` <> 'NULO'
ORDER BY CAST (SUBSTRING(`tabla_departamento`.`id_departamento`, 5) AS UNSIGNED);

pero me genera un error.... en la linea: '(SUBSTRING(`tabla_departamento`.`id_departamento` ,5) AS UNSIGNE

de hecho es el mismo error que me salia... como informacion extra uso EMS MySQL Manager Professional for Windows (3.1.1.1) por un momento pense que esta version no lo soportaba pero si fuera ese el caso no apareciera como sugerencia...

Saludos

  #4 (permalink)  
Antiguo 27/03/2009, 09:44
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Instruccion substring de mysql

Hola fiorella

Quita el espacio entre cast y el parentesis. y en vez de 5 parate en 6.
(dpto-) son las 5 primeras posiciones y necesitas ordenar tus datos desde que comiencen los números. por esta razón es desde 6.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 27/03/2009, 09:47
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Instruccion substring de mysql

Puedes poner el mensaje exacto del error que te muestra?
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #6 (permalink)  
Antiguo 27/03/2009, 16:39
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Instruccion substring de mysql

Hola...

Les cuento monte la consulta en MySQL y me corre chevere... pero les kiero comentar algo cuando lo monte en VB 6.0 no se porque pero cuando me muevo por el recordset y llega al DPTO-4 me salia un error... Entonces desde la BD en EMS borre ese registro y funciona bien... y pues al rato... volvi a insertar ese mismo codigo tambien desde EMS y sirvio... usted saben a que se debe eso... ? Son cosas locas que no he terminado de comprender ... y la verdad no recuerdo el error que generaba


Y otra cosita que queria consultar yo ese id_departamento lo generó incrementandolo... y lo hago asi:

Sub IncrementarIdDepartamento(Rs As ADODB.Recordset, Txt1 As Object)
Dim cadena, sigla, numero As String
Dim mayor As Integer
mayor = 0
Set Rs = Conexion.Execute("SELECT tabla_departamento.id_departamento FROM tabla_departamento WHERE tabla_departamento.id_departamento LIKE 'DPTO-%'")

If Rs.EOF = False Then
While Rs.EOF = False
cadena = Rs!id_departamento
'MsgBox ("Cadena del RsId es: " & cadena)
sigla = Left$(cadena, 5)
'MsgBox ("Sigla:" & sigla)
numero = Mid$(cadena, 6)
'MsgBox ("el numero en letra: " & numero)
numero = CInt(numero)
'MsgBox (" EL NUMERO EN digito: " & numero)
If (numero > mayor) Then
'MsgBox ("la variable mayor vale: " & mayor)
mayor = numero
'MsgBox ("El nuevo valor de la variable mayor es: " & mayor)
End If
Rs.MoveNext
Wend
mayor = mayor + 1
'MsgBox ("El valor final de mayor es:" & mayor)
mayor = CStr(mayor)
'MsgBox ("La variable mayor lista para concatenar: " & mayor)
Txt1.Text = sigla & mayor
'MsgBox ("el codigo de la direccion general es: " & c)
End If
End Sub

y de hecho me lo hace bien... pero cuando kiero por ejemplo hacer algo con los registros que inserto despues de aplicar la funcion me genera otro errorcito... error 13 en tiempo de ejecucion, no coinciden los tipos!!!! Tienen alguna idea del porque? ... ese error me sale con los datos que he ingresado con la funcion del incremento.... con los datos que ingrese desde EMS no me genera ese error... y bueno antes de implementar la funcion ingresaba departamentos desde la aplicacion y los usaba en otras tablas al ingresar otros datos ... y tampoco me generaba error... todo parece indicar que es despues de implementar la funcion... bueno creo que ya eso quedo claro... pero por si las dudas...

Y otra cosilla... gracias a Huesos57 y a Genetix... sus sugerencias me funcionaron... Mil gracias por su apoyo nosotros los novatos...

Besitos Daniel...
  #7 (permalink)  
Antiguo 27/03/2009, 20:52
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Instruccion substring de mysql

vaya fiorella, que ingeniosa forma de localizar el próximo código a ingresar. Sin embargo puede tornarse ineficiente si existen muchos registros en la tabla departamento, ademas segun dices, te está generando problemas de ejecución cuando la usas.

aprovechando el codigo que te dió genetix puedes obtener el proximo codigo evitando la comparación con cada codigo existente en la tabla departamentos.

sería asi:

Código SQL:
Ver original
  1. SELECT (MAX(CAST(SUBSTRING(tabla_departamento.id_departamento, 6) AS UNSIGNED))+1) AS proximo_codigo FROM tabla_departamento;

si lo quieres de una vez concatenado con sigla (que asumo es dpto-) es asi:

Código SQL:
Ver original
  1. SELECT concat('dpto-',(MAX(CAST(SUBSTRING(tabla_departamento.id_departamento, 6) AS UNSIGNED))+1)) AS proximo_codigo FROM tabla_departamento;


Pruebalo y nos cuentas.

__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Última edición por huesos52; 27/03/2009 a las 21:00
  #8 (permalink)  
Antiguo 28/03/2009, 18:52
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Instruccion substring de mysql

Hola Huesos52... Mil gracias por tu sugerencia... evidentemente tu codigo es excelente en comparacion con el mio... lo resolvistes solo con 1 linea de codigo... Y te cuento que cuando lo corro en MySQL lo hace excelente... mirelo

SELECT CONCAT('DPTO-',(MAX(CAST(SUBSTRING(`tabla_departamento`.`id_dep artamento`,6) AS UNSIGNED))+1)) AS proximo_codigo FROM `tabla_departamento` WHERE `tabla_departamento`.`id_departamento` LIKE 'DPTO-%';

ese like al final se debe a que hay departamentos que son direccion o sea llevan las siglas 'DIR-'

Pero cuando lo monto en VB me sale un error ... algo asi: "Error '3265' No se encontro el elemento en la coleccion que corresponda con el nombre o el ordinal pedido" segun lei se debe a que esta mal escrito un nombre de campo supongo que en este caso sea lo que tú le llamas "proximo_codigo" lo que no me explico que porque en MySQL si lo hace bien.... Podrias aclarar mi duda?

Asi lo monto en VB:

Código:
Sub IncrementarIdDepartamento(Rs As ADODB.Recordset, Txt1 As Object)

Set Rs = Conexion.Execute("SELECT CONCAT('DPTO-',(MAX(CAST(SUBSTRING(`tabla_departamento`.`id_departamento`,6) AS UNSIGNED))+1)) AS proximo_codigo FROM `tabla_departamento` WHERE `tabla_departamento`.`id_departamento` LIKE 'DPTO-%'")
Txt1.Text = Rs!id_departamento

End Sub
Perdòn por ser tan fastidiosita!!!
  #9 (permalink)  
Antiguo 28/03/2009, 18:57
 
Fecha de Ingreso: febrero-2009
Mensajes: 101
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Instruccion substring de mysql

Pssss... no me habia fijado que delante del proximo_codigo estaba el "AS" ... Sorry... pero aun asi me sigue mostrando el error cuando hago la asignacion al Txt1

Código:
Sub IncrementarIdDepartamento(Rs As ADODB.Recordset, Txt1 As Object)
Set Rs = Conexion.Execute("SELECT CONCAT('DPTO-',(MAX(CAST(SUBSTRING(`tabla_departamento`.`id_departamento`,6) AS UNSIGNED))+1)) FROM `tabla_departamento` WHERE `tabla_departamento`.`id_departamento` LIKE 'DPTO-%'")
Txt1.Text = Rs!id_departamento 'aca se detiene 
End Sub
  #10 (permalink)  
Antiguo 31/03/2009, 11:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años
Puntos: 2135
Respuesta: Instruccion substring de mysql

Tema trasladado a Visual Basic.

http://www.forosdelweb.com/f21/funci...-datos-413499/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:02.