Visual Basic - Problema de Lógica

Life is soft - evento anual de software empresarial
 
Vista:

Problema de Lógica

Publicado por Alex Aedo (4 intervenciones) el 12/01/2005 01:32:14
Hola: he estado todo el día con este problema y no lo he podido resolver, asi que necesito de sus ayudas.

Tengo Una Tabla que Almacena Los Siguientes Datos:

Asiento |Origen |Destino |
1 | 3 | 6 |
2 | 4 | 8 |
4 | 4 | 6 |
5 | 4 | 6 |
7 | 1 | 6 |
8 | 1 | 3 |
10 | 3 | 4 |
11 | 1 | 8 |
14 | 3 | 8 |

Los Asiento intermedios que no aparecen estan desocupados, por lo tanto los asientos que aparecen estan ocupados.
Lo que no he podido hacer es seleccionar cuales asientos estan ocupados entre un Origen y un Destino cualquiera, Ej.
Origen = 1 Destino = 6.

Les Agradecere Alguna Sugenrecia.

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema de Lógica

Publicado por Benjo (679 intervenciones) el 12/01/2005 02:51:39
Haber si entendí, sino disculpame
Vos tenés tres ampos
Asiento |Origen |Destino
Los asientos es lo que vos tenés que buscar, por lo cual la busqeuda se realizará en base a los campos de Origen y Destino determinado.
El ejemplo de
4 | 4 | 6 |
5 | 4 | 6 |
Dichos asientos estarían ocupados y sus ocupantes viajan desde la sección 4 hasta la sección 6
Una consulta SQL debería devolverte entonces los asientos 4 y 5

Dim strOrigen As String, strDestino As String, strSQL As String
strOrigen = "4"
strDestino = "6"
strSQL = "SELECT Asientos From TuTabla WHERE Origen = '" & strOrigen & "' AND Destino = '" & strDestino & "'"

Esta consulta tendría que devolverte los dos registrso que cumplen la condición.
Fijate si es eso lo que precisabas.
De lo contrario, ofreceme un ejemplo que cual sería el resultado que precisas y en base a ello, haríamos la consulta.

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema de Lógica

Publicado por bla (230 intervenciones) el 12/01/2005 22:52:13
Creo que lo que buscas son los asientos que están libres entre un origen y un destino dados. Sea "x" el origen e "y" el destino:
dim sql as string
dim a as integer
' Recorremos cada tramo del trayecto " x - y " poniendo la condición
' de que el asiento no esté ocupado.
for a=x to y-1
sql=sql & " and (not ("& a &">=origen and "& a &"<destino))"
next
sql="select asientos from tabla where " & mid(sql,5)

el destino no es un <= sino un <, porque en la estación de destino el viajero se baja y por tanto en esa estación se puede subir otro cliente.
El for acaba en y-1 por la misma razón.

Entre los asientos que estén disponibles, podrías seleccionar primero aquel que acabe de quedar libre y que inmediatamente después esté ocupado, así utilizarías mejor los asientos y podrías vender más trayectos. Piensa como hacerlo, parece sencillo.

Me acabo de dar cuenta que con la select que he escrito arriba no saldrían los asientos que no estaban en la tabla. Si esto te afecta lo puedes solucionar facilmente.

Si te queda alguna duda escribe de nuevo.

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Corrijo

Publicado por bla (230 intervenciones) el 12/01/2005 23:06:34
Lo que acabo de decir no era del todo correcto, te podía devolver asientos que si están ocupados.

Es mejor recuperar los que están ocupados en alguno de los tramos:
for a=x to y-1
sql=sql & \" or (\"& a &\">=origen and \"& a &\" < destino)\"
next
sql=\"select asiento from tabla where \" & mid(sql,4) & \" order by asiento\"

Los que te devuelva esta select están ocupados, el resto están libres.
Este método si es seguro.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar