Visual Basic - Ayuda urgente con SQL y VB

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil
Val: 7
Ha aumentado su posición en 3 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Ayuda urgente con SQL y VB

Publicado por Vero (106 intervenciones) el 26/01/2005 12:56:38
Hola a todos, espero que me podais ayudar.

En este código dentro de un botón:

Dim ConsultaServidor As QueryDef

cSQL = "INSERT INTO [Llamadas Servidor] ( id_llamada, Num_linea )"
cSQL = cSQL & " SELECT IdLlamada, NumLinea"
cSQL = cSQL & " FROM Llamadas;"
Set ConsultaServidor = dbBaseDatos.CreateQueryDef(ConsultaServidor, cSQL)
ConsultaServidor.Execute

Me dice que el objeto no es válido o no tiene valor, ¿cómo se hace?
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
sin imagen de perfil
Val: 7
Ha aumentado su posición en 3 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Otra cosita más...

Publicado por Vero (106 intervenciones) el 26/01/2005 13:00:15
También me gustaría que al traspasar no se repitieran los registros, vamos, que si le doy de nuevo al botón, haciéndolo así, se repite. Y comprobar que no se repita con un bucle, tardaría muchísimo, ya que son muchísimos registros, hablemos de 1000000 por ejemplo.
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:Otra cosita más...

Publicado por Manuel Pastrana Orozco (44 intervenciones) el 26/01/2005 16:40:11
1. Antes de grabar pregunta si existe el registro.
a) Si existe, ignora la instrucción y no lo grabes.
b) Si existe, pero hay que actualizarlo: Borra el registro existente y graba el nuevo.
c) No existe, grábalo.
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
sin imagen de perfil
Val: 7
Ha aumentado su posición en 3 puestos en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

RE:Otra cosita más...

Publicado por Vero (106 intervenciones) el 26/01/2005 19:17:00
Pero.... ¿cómo se hace? Yo sólo pregunto la instrucción SQL... o el código que sea, ¿por qué me da error en el código que puse antes?
Gracias y 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

RE:Otra cosita más...

Publicado por Fernando Rios (47 intervenciones) el 02/02/2005 23:50:15
Al hacer la inserción desde un conjunto de registros obtenidos con el SELECT, puedes discriminar que registros quieres insertar y cuales no, así te evitas un bucle y molestar al usuario preguntando registro por registro. Si son tantos, imaginate! El usuario nunca va a terminar.

En lugar que que crees una QueryDef cada que insertas, crea un procedimiento almacenado en el servidor al que le pases los parametros de inserción y llamalo desde vb con un bucle, o bien
si quieres evitar insertar registros duplicados discrimina los que ya existan en la base de datos, por ejemplo (esto lo utilizo para actualizar la base de datos de trabajadores de mi empresa, insertando solo aquellos que no existen):

INSERT INTO comun.trabajadores SELECT * from comun."qry_TRABAJADOR_A_PGSTE" tsql where tsql.expediente not in (SELECT expediente FROM comun.trabajadores) AND nomina is not null

Donde:
comun.trabajadores es mi tabla destino (la tabla mas actualizada)
qry_TRABAJADOR_A_PGSTE es una vista obtenida de un servidor antiguo, y contiene tanto los trabajadores nuevos como los antiguos.

Si ejecutas unicamente el SELECT (excluyendo la parte del "INSERT INTO comun.trabajadores") obtendras los trabajadores que se insertarán, y con frecuencia, no son muchos.

Por otro lado, cuando quiero actualizar los demas trabajadores (que hayan cambiado su domicilio, telefono o algo), tengo que hacerlo registro a registro, y es así:

update comun.trabajadores SET nombre = t.nombre,
apellidopaterno = t.apellidopaterno,
apellidomaterno = t.apellidomaterno,
sexo = t.sexo,
fechanacimiento = t.fechanacimiento,
rfc = t.rfc,
curp = t.curp,
domicilio = t.domicilio,
delegacion = t.delegacion,
codigopostal = t.codigopostal,
estadocivil = t.estadocivil,
noafiliacionimss = t.noafiliacionimss,
telefonoparticular = t.telefonoparticular,
fechaingreso = t.fechaingreso,
cuentabancaria = t.cuentabancaria,
nomina = t.nomina,
idpuesto = t.idpuesto,
idarea = t.idarea
from comun."qry_TRABAJADOR_A_PGSTE" t
where comun.trabajadores.expediente = t.expediente AND t.nomina is not null

Si te fijas, lo hago campo por campo y solo para aquellos trabajadores que ya existen en mi tabla destino (comun.trabajadores)

En ambos casos, compruebo que su tipo de nomina (campo nomina) sea distinto de nulo.

Espero te sirva

Saludos,

Fer
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