Sei sulla pagina 1di 18

INTRODUCCIN A SQLSERVER

Qu es Microsoft SQLServer?
Microsoft SQLServer es un sistema de gestin de bases de datos relacionales (SGBDR), que utiliza un lenguaje de programacin propio (TransacSQL), que permite aplicar las convenciones definidas en el lenguje de programacin SQL (Standard Query Langage), globalmente aceptado e
implementado para la realizacin de consultas por los principales proveedores de bases de datos comerciales (Oracle, Microsoft SQLServer, Microsoft
Access, MySql, Postgres, ).
Cada una de estas empresas, realizan en sus productos una implementacin de los estndares definidos a nivel global para el lenguaje de programacin
SQL.
A diferencia de otros sistemas de almacenamiento de informacin, que utilizan ficheros independientes para almacenar cada tabla o subconjunto de
informacin, los gestores de bases de datos como SQLServer almacenan toda la informacin en un fichero de base de datos que incluye todos los
objetos definidos en la misma, pudiendo utilizar segn la configuracin algn fichero adicional para almacenar un log de seguimiento de operaciones y
una serie de datos temporales.
Un sistema de gestin de bases de datos permite controlar y delimitar el acceso a cada tipo de objetos definidos en la misma as como el uso
compartido de la informacin y el acceso simultneo por parte de varios usuarios.

Conceptos SQL
El lenguaje SQL tiene como objetivo el permitir implementar y manipular de forma sencilla una serie de tablas relacionadas entre s.

DDL
Se denomina DDL (Data Definition Language) a la parte de SQL que permite definir los objetos existentes en la base de datos y las relaciones
existentes entre los mismos.

DML
Se denomina DML (Data Manipulation Language) a la parte de SQL que permite manipular la informacin almacenada en los distintos objetos de la
base de datos (Consultar, Modificar, Insertar y/o Borrar).

Tipos de Datos
Cada sistema de gestin de base de datos maneja una serie de tipos de datos o tipos de valores que se pueden asignar a los campos contenidos en cada

tabla.
Algunos de los tipos de datos ms utilizados son:
Entero (Int): Permite introducir nmeros de poca dimensin y sin decimales.
Real (Decimal): Permite introducir nmeros reales con parte decimal.
Caracter: Permite introducir un carcter (letra, nmero o smbolo especial).
Cadena: Permite introducir una cadena de caracteres. Segn el tipo concreto utilizado, esta cadena estar rellena o no con espacios hasta la
longitud definida.
DateTime: Permite introducir una informacin de tipo fecha y hora.
Cada lenguaje tiene una serie de funciones y operadores que permiten hacer comparaciones y conversiones entre datos del mismo o distinto tipo.

Base de datos
Se denomina Base de Datos a un conjunto de objetos relacionados entre s. En una base de datos, segn el proveedor y el sistema que estemos
utilizando, se pueden encontrar diferentes tipos de objetos:
Esquemas (divisin por reas de los objetos de la b.d.)
Usuarios (inicio de sesin)
Tablas
Vistas
ndices
Sinnimos
Objetos de programacin (disparadores asociados a eventos, funciones y procedimientos, restricciones).

Elementos a definir en una base de datos SQLServer


1. Instancia de SQLSserver: Cuando se realiza una instalacin de SQLServer, se crea una instancia de SQLServer en esa mquina. Esta instancia
podr tener definidas una o varias bases de datos. Para poder acceder a los datos habr que poner \\[nombre equipo]\[nombre instancia
sqlserver] y conectarse mediante uno de los mtodos permitidos:
1. Autenticacin Windows: SQLServer utilizar el usuario y contrasea proporcionado y validado por windows.
2. Autenticacin interna SQLServer: SQLServer pide el usuario y contrasea que estn almacenados en la misma base de datos.
En un mismo equipo pueden existir una o varias instancias de SQLServer ejecutndose de forma simultnea.
2. Base de datos: Es la entidad global en la que se encuentran agrupadas y relacionadas entre s una o varias tablas, con todos los objetos. Cuando
un usuario se conecta a SQLServer con una cuenta enconcreto, se conecta a una de las bases de datos que estn activas que es la asignada por
defecto a la cuenta de usuario con la que nos conectamos.
En una misma instancia pueden existir una o varias bases de datos. Existen varias bases de datos que se crean por defecto en la instalacin.
3. Esquema: Dentro de una base de datos, se pueden agrupar los objetos en varios esquemas. Esto permite empaquetar datos e independizarlos
para poder dar permisos por perfiles a esquemas concretos en vez de tener que hacerlo para cada tabla.
En cada base de datos pueden existir varios esquemas. Existen varios esquemas que se crean por defecto en la instalacin.
4. Usuarios: Son los usuarios que se utilizan para conectarse. Pueden ser cuentas de usuarios de windows o cuentas definidas dentro de la
instancia de la base de datos con nombre de usuario y contrasea.
Existe una cuenta de usuario por defecto llamada sa que tiene perfiles de administrador.
5. Vistas:
6. Indices
7. Procedimientos y funciones
8. Disparadores
9. Permisos

Pasos a seguir:
1. Crear la base de datos
2. Crear todos los esquemas y tablas necesarios
3. Crear los usuarios o cuentas de login
4. Dar acceso a un usuario a una base de datos
use [prueba]
create user [usr1] for login [ordenador\usr1]
Dar acceso a un usuario a una tabla
grant execute
Quitar acceso a un usuario
revoke execute

Consideraciones de CitectVijeoProject

Normalmente se utilizan variables de tipo cadena que al guardarse o recuperarse en la base de datos, se convierten de forma automtica. Es
conveniente definir funciones auxiliares que permitan realizar todas las conversiones de datos siempre del mismo modo.

Al realizar una consulta asociada a una ventana de datos, se dispone de un lmite en el tamao de la cadena de caracteres de la sentencia a
introducir. Debido a esto, lo ideal es nombrar los campos con los mnimos caracteres posibles, dando as tambin un aadido de complejidad al
producto resultante que complica poder acceder a la informacin si no se cuenta con la documentacin adecuada.

Separadores de fecha. El formato ideal de manejo de campos de tipo fecha y hora es convertirlos a una cadena YYYY/MM/DD hh:mm:ss. De
esta forma, se consigue una cadena de texto que se puede convertir de forma automtica al guardarla en un campo de tipo fecha-hora.

Caracteres especiales (, tldes y algunos smbolos): Segn el lenguaje establecido para la base de datos y el juego de caracteres se puede dar el
caso de que algunos de estos caracteres no se interpreten bien, si se est utilizando un juego de caracteres para almacenar los datos y otro
diferente para mostrarlos (p.ej. Si un ordenador est en windows y otro en linux).

Configuraciones de Vijeo Citect recomendadas:


Configuracin de Vijeo Citect para evitar problemas con juegos de caracteres: El parmetro ANSItoOEM del Citect.ini debe valer 1 (por
defecto, vale 0) para que Vijeo Citect procese bien los caracteres especiales (p.e., con acentos) introducidos en las Bases de Datos y se
muestren bien en pantalla. El parmetro debe valer 1 en el momento de compilar, que es cuando se procesan las bases de datos.
Configuracin d eseparadores de decimales y miles: En el fichero Citect.ini, se definen entre otras cosas el carcter que se utiliza como
separador de miles y el que se usa como separador de decimales. Por defecto la configuracin regional en espaol tiene definido por defecto
el carcacter ,. Para no tener problemas con los nmeros reales habr que introducir estas lneas en el fichero Citect.ini
...
ANSItoOEM = 1
...
[Intl]
bDecimal = 0
sDecimal = .
......

Creacin de una Origen de datos por ODBC


ODBC (Open DataBase Configuration) es un estndar definido por Microsoft para poder implementar en windows interfaces de acceso a distintos tipos
de bases de datos, tanto para importar como para exportar informacin.
Pasos a seguir:
1. Abrir el administrador de orgenes de datos ODBC.
2. En la ficha DSN de usuario, agregar un origen de datos del usuario.
3. Seleccionar el controlador Cliente SQL Cliente SQL Server 10.0.
4. En los pasos de configuracin, hay que especificar:
1. El nombre de la instancia (\\equipo\instancia) de la base de datos a la que queremos que se conecte este enlace de datos.
2. El usuario y contrasea a utilizar en esta conexin, en caso de que queramos especificarlo si estamos usando uno especfico de interno de
SQL Server en vez de usar el usuario de windows.
3. La base de datos a la que el usuario se conecta por defecto al utilizar este conector. Esto es importante porque si no puede dar problemas.
Habr que especificar la base de datos de las incluidas en la instancia a la que queremos que se conecte y se ponga como activa.

Uso de ODBC en Citect Vijeo Project


// Definimos una variable con el nombre del conector ODBC que deberemos tener activo en y accesible desde el sistema
STRING NombreDSN="DSN=ODBC1";
// Definimos una variable con el nombre del esquema en el que est la tabla
STRING Nombreesquema="Gomarsa";
// Definimos una variable con el nombre de la tabla
STRING NombreTabla="Tabla1";
// Definimos una cadena con la lista de campos que vamos a manejar
STRING NombreCampos="I,FH,C00,C01,C02,C03,C04,C05,C06,C07,C08,C09";
// Definimos una cadena para asignar la sentencia a ejecutar
STRING ConsultaSQL;
// Definimos una variable de tipo int que vamos a utilizar como enlace a la sentencia que estamos ejecutando (hSQL)
// y otra para cargar el valor devuelto por cada sentencia que se ejecute
INT hSQL, iResult;
// Abrimos la conexin con el controlador ODBC
hSQL = SQLConnect(NombreDSN);
// Si todo ha ido bien, empezamos a construir la sentencia a ejecutar
IF hSQL <> -1 THEN
// Mandamos la primera parte de la sentencia
//select con nmeros
ConsultaSQL="SELECT " + NombreCampos + " FROM " + NombreTabla + " WHERE I > '" + IntToStr(Iinicial) + "' AND I < '" + IntToStr(Ifinal) + "' ORDER BY I
DESC";
iResult = SQLExec(hSQL, ConsultaSQL);
// Si la sentencia se ha ejecutado bien, vamos leyendo cada registro
IF iResult = 0 THEN
WHILE SQLNext(hSQL) = 0 DO
I=SQLGetField(hSQL, "I");
FH=SQLGetField(hSQL, "FH");
C00=SQLGetField(hSQL, "C00");
C01=SQLGetField(hSQL, "C01");
C02=SQLGetField(hSQL, "C02");
C03=SQLGetField(hSQL, "C03");
C04=SQLGetField(hSQL, "C04");
C05=SQLGetField(hSQL, "C05");
C06=SQLGetField(hSQL, "C06");
C07=SQLGetField(hSQL, "C07");
C08=SQLGetField(hSQL, "C08");
C09=SQLGetField(hSQL, "C09");
END
END
SQLDisconnect(hSQL);
END

END
//select con nmeros
INT Iinicial=DateSub(TimeCurrent()-300,StrToDate("01/01/1980"));
INT Ifinal=DateSub(TimeCurrent(),StrToDate("01/01/1980"));
STRING ConsultaSQL;
INT hSQL, iResult;
INT I;
STRING FH;
//CUIDADO CON LOS REALES YA QUE HAY QUE DEFINIRLOS COMO STRINGS YA QUE EL SQL SERVER RETORNA LOS REALES CON
//SEPARACIN DECIMAL "," MIENTRAS QUE EL CITECT ESPERA UN "." Y NO FUNCIONA
STRING C00,C01,C02,C03,C04,C05,C06,C07,C08,C09;
//select con strings
//ConsultaSQL="SELECT " + NombreCampos + " FROM " + NombreTabla + " WHERE FH > '" + fechainicial + "' AND FH < '" + fechafinal + "' ORDER BY I DESC";
//iResult = SQLExec(hSQL, ConsultaSQL);
IF iResult = 0 THEN
WHILE SQLNext(hSQL) = 0 DO
I=SQLGetField(hSQL, "I");
FH=SQLGetField(hSQL, "FH");
C00=SQLGetField(hSQL, "C00");
C01=SQLGetField(hSQL, "C01");
C02=SQLGetField(hSQL, "C02");
C03=SQLGetField(hSQL, "C03");
C04=SQLGetField(hSQL, "C04");
C05=SQLGetField(hSQL, "C05");
C06=SQLGetField(hSQL, "C06");
C07=SQLGetField(hSQL, "C07");
C08=SQLGetField(hSQL, "C08");
C09=SQLGetField(hSQL, "C09");
END
END
SQLDisconnect(hSQL);
END
END

Ejemplos de cdigo CITECT para hacer operaciones con SQL


CREATE (Creacin de tabla)
//CREATE
FUNCTION SQL_CreateTable()
//Esta sentencia SQL CREATE TABLE slo funciona para crear una Tabla en una Base de Datos SQL Server
//si la queremos crear en Access u Oracle entonces la sentencia cambia
STRING NombreDSN="DSN=ODBC1";
STRING NombreTabla="TABLA0";
STRING NombreCampos="I,FH,C00,C01,C02,C03,C04,C05,C06,C07,C08,C09";
STRING ConsultaSQL;

INT hSQL, iResult;


hSQL = SQLConnect(NombreDSN);
IF hSQL <> -1 THEN
SQLSet(hSQL, "CREATE TABLE [dbo].[" + NombreTabla + "] (");
SQLAppend(hSQL, "[I] [bigint] NOT NULL CONSTRAINT [I] PRIMARY KEY ,");
SQLAppend(hSQL,"[FH] [char] (40) NULL ,");
SQLAppend(hSQL,"[C00] [real] NULL ,");
SQLAppend(hSQL,"[C01] [real] NULL ,");
SQLAppend(hSQL,"[C02] [real] NULL ,");
SQLAppend(hSQL,"[C03] [real] NULL ,");
SQLAppend(hSQL,"[C04] [real] NULL ,");
SQLAppend(hSQL,"[C05] [real] NULL ,");
SQLAppend(hSQL,"[C06] [real] NULL ,");
SQLAppend(hSQL,"[C07] [real] NULL ,");
SQLAppend(hSQL,"[C08] [real] NULL ,");
SQLAppend(hSQL,"[C09] [real] NULL ,");
SQLAppend(hSQL,") ON [PRIMARY]");
iResult = SQLExec(hSQL,"");
SQLDisconnect(hSQL);
END
END

SELECT (Seleccin o consulta de datos)


//SELECT
FUNCTION SQL_select()
STRING NombreDSN="DSN=ODBC1";
STRING NombreTabla="TABLA0";
STRING NombreCampos="I,FH,C00,C01,C02,C03,C04,C05,C06,C07,C08,C09";
//select con nmeros
INT Iinicial=DateSub(TimeCurrent()-300,StrToDate("01/01/1980"));
INT Ifinal=DateSub(TimeCurrent(),StrToDate("01/01/1980"));
//select con strings
STRING fechainicial="2005/01/01;00:00:00";
STRING ano=(DateYear(TimeCurrent(),1));IF (DateYear(TimeCurrent(),1))<10 THEN ano= "0"+ano END;
STRING mes=(DateMonth(TimeCurrent())); IF (DateMonth(TimeCurrent()))<10 THEN mes= "0"+mes END;
STRING dia=(DateDay(TimeCurrent()));IF (DateDay(TimeCurrent()))<10 THEN dia= "0"+dia END;
STRING hora=TimeHour(TimeCurrent());IF TimeHour(TimeCurrent())<10 THEN hora= "0"+hora END;
STRING minuto=TimeMin(TimeCurrent()); IF TimeMin(TimeCurrent())<10 THEN minuto= "0"+minuto END;
STRING segundo=TimeSec(TimeCurrent());IF TimeSec(TimeCurrent())<10 THEN segundo= "0"+segundo END;
STRING fechafinal= ano + "/" + mes + "/" + dia + ";" + hora + ":" + minuto + ":" + segundo;
STRING ConsultaSQL;
INT hSQL, iResult;
INT I;
STRING FH;
//CUIDADO CON LOS REALES YA QUE HAY QUE DEFINIRLOS COMO STRINGS YA QUE EL SQL SERVER RETORNA LOS REALES CON
//SEPARACIN DECIMAL "," MIENTRAS QUE EL CITECT ESPERA UN "." Y NO FUNCIONA
STRING C00,C01,C02,C03,C04,C05,C06,C07,C08,C09;
hSQL = SQLConnect(NombreDSN);
IF hSQL <> -1 THEN
//select con nmeros
ConsultaSQL="SELECT " + NombreCampos + " FROM " + NombreTabla + " WHERE I > '" + IntToStr(Iinicial) + "' AND I < '" + IntToStr(Ifinal) + "' ORDER BY I DESC";
iResult = SQLExec(hSQL, ConsultaSQL);
//select con strings
//ConsultaSQL="SELECT " + NombreCampos + " FROM " + NombreTabla + " WHERE FH > '" + fechainicial + "' AND FH < '" + fechafinal + "' ORDER BY I DESC";
//iResult = SQLExec(hSQL, ConsultaSQL);
IF iResult = 0 THEN
WHILE SQLNext(hSQL) = 0 DO
I=SQLGetField(hSQL, "I");
FH=SQLGetField(hSQL, "FH");
C00=SQLGetField(hSQL, "C00");
C01=SQLGetField(hSQL, "C01");
C02=SQLGetField(hSQL, "C02");
C03=SQLGetField(hSQL, "C03");
C04=SQLGetField(hSQL, "C04");
C05=SQLGetField(hSQL, "C05");
C06=SQLGetField(hSQL, "C06");
C07=SQLGetField(hSQL, "C07");
C08=SQLGetField(hSQL, "C08");
C09=SQLGetField(hSQL, "C09");
END
END
SQLDisconnect(hSQL);
END
END

INSERT (Insercin de datos)


REAL R00,R01,R02,R03,R04,R05,R06,R07,R08,R09;
FUNCTION SQL_INSERT()
STRING NombreDSN="DSN=ODBC1";
STRING NombreTabla="TablaSQL1";
STRING NombreCampos="I,FH,C00,C01,C02,C03,C04,C05,C06,C07,C08,C09"
STRING ConsultaSQL;
//calculo del nmero de segundos para indexar y consultas sql
INT indice=DateSub(TimeCurrent(),StrToDate("01/01/1980"));
//calculo de la fecha y hora para indexar y consultas sql
STRING ano=(DateYear(TimeCurrent(),1));IF (DateYear(TimeCurrent(),1))<10 THEN ano= "0"+ano END;
STRING mes=(DateMonth(TimeCurrent())); IF (DateMonth(TimeCurrent()))<10 THEN mes= "0"+mes END;
STRING dia=(DateDay(TimeCurrent()));IF (DateDay(TimeCurrent()))<10 THEN dia= "0"+dia END;
STRING hora=TimeHour(TimeCurrent());IF TimeHour(TimeCurrent())<10 THEN hora= "0"+hora END;
STRING minuto=TimeMin(TimeCurrent()); IF TimeMin(TimeCurrent())<10 THEN minuto= "0"+minuto END;
STRING segundo=TimeSec(TimeCurrent());IF TimeSec(TimeCurrent())<10 THEN segundo= "0"+segundo END;
STRING fechahora = ano + "/" + mes + "/" + dia + ";" + hora + ":" + minuto + ":" + segundo;
//calculo de los valores reales
R00=R00 + 0.1;R01=R00 + 0.2;R02=R00 + 0.3;R03=R00 + 0.4;R04=R00 + 0.5;
R05=R00 + 0.6;R06=R00 + 0.7;R07=R00 + 0.8;R08=R00 + 0.9;R09=R00 + 1.0;
//grabacin en la tabla de la base de datos
//todos los ints y reals hay que convertirlos a strings ya que citect slo gestiona strings
STRING sI;
STRING sC00,sC01,sC02,sC03,sC04,sC05,sC06,sC07,sC08,sC09;
sI=IntToStr(indice)
sC00=RealToStr(R00,10,1);sC01=RealToStr(R01,10,1);sC02=RealToStr(R02,10,1);sC03=RealToStr(R03,10,1);sC04=RealToStr(R04,10,1)
sC05=RealToStr(R05,10,1);sC06=RealToStr(R06,10,1);sC07=RealToStr(R07,10,1);sC08=RealToStr(R08,10,1);sC09=RealToStr(R09,10,1)
INT hSQL, iResult;
hSQL = SQLConnect(NombreDSN);
IF hSQL <> -1 THEN
//ConsultaSQL="INSERT
INTO
"
+
NombreTabla
+
"
("
+
NombreCampos
+
")
VALUES
("+sI+",'"+fechahora+"',"+sC00+","+sC01+","+sC02+","+sC03+","+sC04+","+sC05+","+sC06+","+sC07+","+sC08+","+sC09+")"
//Message("ConsultaSQL",ConsultaSQL,48);
SQLSet(hSQL, "INSERT INTO " + NombreTabla + " (" + NombreCampos + ") VALUES (");
SQLAppend(hSQL,sI+",'"+fechahora+"',"+sC00+","+sC01+","+sC02+","+sC03+","+sC04+","+sC05+","+sC06+","+sC07+","+sC08+","+sC09+")");

END

iResult = SQLExec(hSQL, "");


IF iResult <> 0 THEN
Message("Status error", SQLErrMsg(), 48);
END
SQLDisconnect(hSQL);
END

UPDATE (Actualizacin de datos)


//UPDATE
FUNCTION SQL_Update()
STRING NombreDSN="DSN=ODBC1";
STRING NombreTabla="TABLA0";
//update con nmeros
INT Iinicial=DateSub(TimeCurrent()-300,StrToDate("01/01/1980"));
INT Ifinal=DateSub(TimeCurrent(),StrToDate("01/01/1980"));
//grabacin en la tabla de la base de datos
//todos los ints y reals hay que convertirlos a strings ya que citect slo gestiona strings
REAL U00,U01,U02,U03,U04,U05,U06,U07,U08,U09;
U00=0.1;U01=0.1;U02=0.1;U03=0.1;U04=0.1;U05=0.1;U06=0.1;U07=0.1;U08=0.1;U09=0.1;
STRING sC00,sC01,sC02,sC03,sC04,sC05,sC06,sC07,sC08,sC09;
sC00=RealToStr(U00,10,1);sC01=RealToStr(U01,10,1);sC02=RealToStr(U02,10,1);sC03=RealToStr(U03,10,1);sC04=RealToStr(U04,10,1)
sC05=RealToStr(U05,10,1);sC06=RealToStr(U06,10,1);sC07=RealToStr(U07,10,1);sC08=RealToStr(U08,10,1);sC09=RealToStr(U09,10,1)
//UPDATE
STRING
NombreCampos="C00="+sC00+",C01="+sC01+",C02="+sC02+",C03="+sC03+",C04="+sC04+",C05="+sC05+",C06="+sC06+",C07="+sC07+",C08="+sC08+",C09="+sC09+""
INT hSQL, iResult;
STRING ConsultaSQL;
hSQL = SQLConnect(NombreDSN);
IF hSQL <> -1 THEN
ConsultaSQL="UPDATE " + NombreTabla + " SET " + NombreCampos + " WHERE I > '" + IntToStr(Iinicial) + "'";
iResult = SQLExec(hSQL, ConsultaSQL);
SQLDisconnect(hSQL);
END
END

DELETE (Borrado de datos)


//DELETE
FUNCTION SQL_Delete()
STRING NombreDSN="DSN=ODBC1";
STRING NombreTabla="TABLA0";
//delete con nmeros
INT Iinicial=DateSub(TimeCurrent()-300,StrToDate("01/01/1980"));
INT Ifinal=DateSub(TimeCurrent(),StrToDate("01/01/1980"));
//delete con strings
STRING fechainicial="2005/01/01;00:00:00";
STRING ano=(DateYear(TimeCurrent(),1));IF (DateYear(TimeCurrent(),1))<10 THEN ano= "0"+ano END;
STRING mes=(DateMonth(TimeCurrent())); IF (DateMonth(TimeCurrent()))<10 THEN mes= "0"+mes END;
STRING dia=(DateDay(TimeCurrent()));IF (DateDay(TimeCurrent()))<10 THEN dia= "0"+dia END;
STRING hora=TimeHour(TimeCurrent());IF TimeHour(TimeCurrent())<10 THEN hora= "0"+hora END;
STRING minuto=TimeMin(TimeCurrent()); IF TimeMin(TimeCurrent())<10 THEN minuto= "0"+minuto END;
STRING segundo=TimeSec(TimeCurrent());IF TimeSec(TimeCurrent())<10 THEN segundo= "0"+segundo END;
STRING fechafinal= ano + "/" + mes + "/" + dia + ";" + hora + ":" + minuto + ":" + segundo;
INT hSQL, iResult;
STRING ConsultaSQL;
hSQL = SQLConnect(NombreDSN);
IF hSQL <> -1 THEN
//delete con nmeros
ConsultaSQL="DELETE FROM " + NombreTabla + " WHERE I > '" + IntToStr(Iinicial) + "' AND I < '" + IntToStr(Ifinal) + "' ";
iResult = SQLExec(hSQL, ConsultaSQL);
//delete con strings
//ConsultaSQL="DELETE FROM " + NombreTabla + " WHERE FH > '" + fechainicial + "' AND FH < '" + fechafinal + "' ";
//iResult = SQLExec(hSQL, ConsultaSQL);
SQLDisconnect(hSQL);
END
END

Ejemplo de browser en Citect usando consulta SQL


FUNCTION browser
//ActiveX Database Exchange
//_ObjectSetProperty(ObjectByName("an4"), "DBConString1", "DSN=Citect_DBF");
_ObjectSetProperty(ObjectByName("an4"), "DBConString1", "DSN=dBASE Files;DBQ=C:\SCHNEIDER APPLICATION\VIJEO CITECT\DATA;DefaultDir=C:\SCHNEIDER
APPLICATION\VIJEO CITECT\DATA;DriverId=533;MaxBufferSize=2048;PageTimeout=1;");
//_ObjectSetProperty(ObjectByName("AN4"), "DBConString1", "DSN=dBASE Files;DBQ=C:\SCHNEIDER APPLICATION\VIJEO CITECT\DATA;DefaultDir=C:\SCHNEIDER
APPLICATION\VIJEO ");
//_ObjectSetProperty(ObjectByName("AN4"), "RecordSource1", "SELECT * FROM TABLA1.DBF ")
STRING nombretabla;
NombreTabla ="TABLA1";
//INT ListIndex=_ObjectGetProperty(ObjectByName("ComboBox"), "ListIndex")
//NombreTabla=_ObjectGetProperty(ObjectByName("ComboBox"), "List(1)")
STRING nombrecampos;
NombreCampos ="INICIO,PARADA,NODRIZA,S1,S2,S3,S4,S5,S6,S7,S8,SR";
//calculo de la fecha inicial
STRING AnoInicial=IntToStr(_ObjectGetProperty(ObjectByName("Fecha_Inicial"), "Year"));
STRING MesInicial=IntToStr(_ObjectGetProperty(ObjectByName("Fecha_Inicial"), "Month"));
IF (StrToInt(MesInicial))<10 THEN MesInicial= "0"+ MesInicial END;
STRING DiaInicial=IntToStr(_ObjectGetProperty(ObjectByName("Fecha_Inicial"), "Day"));
IF (StrToInt(DiaInicial))<10 THEN DiaInicial= "0"+ DiaInicial END;
STRING FechaInicial_1= DiaInicial + "/" + MesInicial+ "/" + AnoInicial;
STRING HoraInicial=IntToStr(_ObjectGetProperty(ObjectByName("Hora_Inicial"), "Hour"));
IF (StrToInt(HoraInicial))<10 THEN HoraInicial= "0"+ HoraInicial END;
STRING MinutoInicial=IntToStr(_ObjectGetProperty(ObjectByName("Hora_Inicial"), "Minute"));
IF (StrToInt(MinutoInicial))<10 THEN MinutoInicial= "0"+ MinutoInicial END;
STRING SegundoInicial=IntToStr(_ObjectGetProperty(ObjectByName("Hora_Inicial"), "Second"));
IF (StrToInt(SegundoInicial))<10 THEN SegundoInicial= "0"+ SegundoInicial END;
STRING HoraInicial_1=HoraInicial + ":" + MinutoInicial+ ":" + SegundoInicial;
STRING fechainicial=FechaInicial_1 + ";" + HoraInicial_1;
//fechainicial = DateAdd(_ObjectGetProperty(ObjectByName("Fecha_Inicial"), "Value"),3600 * horainicial + 60 * minutoinicial + segundoinicial)
//fechainicial="2000/01/01;00:00:00";
INT indiceinicial;
indiceinicial = DateSub("1/1/1980", fechainicial);
//calculo de la fecha final
//ActiveX Calendar->AN205 (fecha final)
STRING AnoFinal=IntToStr(_ObjectGetProperty(ObjectByName("Fecha_Final"), "Year"));

STRING MesFinal=IntToStr(_ObjectGetProperty(ObjectByName("Fecha_Final"), "Month"));


IF (StrToInt(MesFinal))<10 THEN MesFinal= "0"+ MesFinal END;
STRING DiaFinal=IntToStr(_ObjectGetProperty(ObjectByName("Fecha_Final"), "Day"));
IF (StrToInt(DiaFinal))<10 THEN DiaFinal= "0"+ DiaFinal END;
STRING FechaFinal_1=DiaFinal + "/" + MesFinal + "/" + AnoFinal;
STRING HoraFinal=IntToStr(_ObjectGetProperty(ObjectByName("Hora_Final"), "Hour"));
IF (StrToInt(HoraFinal))<10 THEN HoraFinal= "0"+ HoraFinal END;
STRING MinutoFinal=IntToStr(_ObjectGetProperty(ObjectByName("Hora_Final"), "Minute"));
IF (StrToInt(MinutoFinal))<10 THEN MinutoFinal= "0"+ MinutoFinal END;
STRING SegundoFinal=IntToStr(_ObjectGetProperty(ObjectByName("Hora_Final"), "Second"));
IF (StrToInt(SegundoFinal))<10 THEN SegundoFinal= "0"+ SegundoFinal END;
STRING HoraFinal_1=HoraFinal+ ":" + MinutoFinal+ ":" + SegundoFinal;
STRING fechafinal=FechaFinal_1 + ";" + HoraFinal_1;
//fechafinal= DateAdd(_ObjectGetProperty(ObjectByName("Fecha_Final"), "Value"),3600 * horafinal+ 60 * minutofinal+ segundofinal)
//fechafinal="2010/01/01;00:00:00";
INT indicefinal;
indicefinal= DateSub("1/1/1980", fechafinal)
//Calculo de la Consulta SQL
STRING ConsultaSQL;
//select con nmeros
//ConsultaSQL="SELECT " + NombreCampos + " FROM " + NombreTabla + " WHERE INICIO > '" + IntToStr(indiceinicial) + "' AND INICIO < '" + IntToStr(indicefinal) + "'
ORDER BY INICIO ASC";
//select con strings
ConsultaSQL="SELECT " + NombreCampos + " FROM " + NombreTabla+ " WHERE INICIO > '"+ fechainicial +"' AND INICIO < '" + fechafinal +"' ORDER BY INICIO ASC";
// + " WHERE INICIO > '" + fechainicial + " 'AND INICIO < ' " + fechafinal; //+ "' ORDER BY I ASC";
_ObjectSetProperty(ObjectByName("AN4"), "RecordSource1",ConsultaSQL);
END

Ejemplo de funcion de librera (GomLib.txt) a colocar en carpeta de proyecto de citect


STRING FUNCTION FechaTexto(STRING i_var_fecha, STRING i_var_hora)
//calculo de la fecha inicial
STRING AnoInicial=IntToStr(_ObjectGetProperty(ObjectByName(i_var_fecha), "Year"));
STRING MesInicial=IntToStr(_ObjectGetProperty(ObjectByName(i_var_fecha), "Month"));
IF (StrToInt(MesInicial))<10 THEN MesInicial= "0"+ MesInicial END;
STRING DiaInicial=IntToStr(_ObjectGetProperty(ObjectByName(i_var_fecha), "Day"));
IF (StrToInt(DiaInicial))<10 THEN DiaInicial= "0"+ DiaInicial END;
STRING FechaInicial_1= DiaInicial + "/" + MesInicial+ "/" + AnoInicial;
STRING HoraInicial=IntToStr(_ObjectGetProperty(ObjectByName(i_var_hora), "Hour"));
IF (StrToInt(HoraInicial))<10 THEN HoraInicial= "0"+ HoraInicial END;
STRING MinutoInicial=IntToStr(_ObjectGetProperty(ObjectByName(i_var_hora), "Minute"));
IF (StrToInt(MinutoInicial))<10 THEN MinutoInicial= "0"+ MinutoInicial END;
STRING SegundoInicial=IntToStr(_ObjectGetProperty(ObjectByName(i_var_hora), "Second"));
IF (StrToInt(SegundoInicial))<10 THEN SegundoInicial= "0"+ SegundoInicial END;
STRING HoraInicial_1=HoraInicial + ":" + MinutoInicial+ ":" + SegundoInicial;
STRING fechainicial=FechaInicial_1 + ";" + HoraInicial_1;
//fechainicial = DateAdd(_ObjectGetProperty(ObjectByName("Fecha_Inicial"), "Value"),3600 * horainicial + 60 * minutoinicial + segundoinicial)
//fechainicial="2000/01/01;00:00:00";
INT indiceinicial;
indiceinicial = DateSub("01/01/1980", fechainicial);
RETURN fechainicial;
END

//EXPORTACIN A FICHEROS CSV


FUNCTION TrnExportCSV_00
STRING ano,mes,dia,hora,minuto,segundo;
ano=(DateYear(TimeCurrent(),1));IF (DateYear(TimeCurrent(),1))<10 THEN ano= "0"+ano END;
mes=(DateMonth(TimeCurrent())); IF (DateMonth(TimeCurrent()))<10 THEN mes= "0"+mes END;
dia=(DateDay(TimeCurrent()));IF (DateDay(TimeCurrent()))<10 THEN dia= "0"+dia END;
hora=TimeHour(TimeCurrent());IF TimeHour(TimeCurrent())<10 THEN hora= "0"+hora END;
minuto=TimeMin(TimeCurrent()); IF TimeMin(TimeCurrent())<10 THEN minuto= "0"+minuto END;
segundo=TimeSec(TimeCurrent());IF TimeSec(TimeCurrent())<10 THEN segundo= "0"+segundo END;
STRING pathfichero= PathToStr("[C:\Schneider Application\Vijeo Citect\data]") + "\CSV" + ano + mes + dia + hora + Minuto + ".CSV"
// Opcin 2:
//
STRING pathfichero= PathToStr("[data]") + "\CSV" + ano + mes + dia + hora + Minuto + ".CSV"
// Opcin 3:
//
STRING pathfichero= PathToStr("C:\Schneider Application\Vijeo Citect\data") + "\CSV" + ano + mes + dia + hora + Minuto + ".CSV"
TrnExportCSV(pathfichero, TimeCurrent(), 9, 60, 4, "AN4");
END
//EXPORTACIN A FICHEROS DBF
FUNCTION TrnExportDBF_00
STRING ano,mes,dia,hora,minuto,segundo;
ano=(DateYear(TimeCurrent(),1));IF (DateYear(TimeCurrent(),1))<10 THEN ano= "0"+ano END;
mes=(DateMonth(TimeCurrent())); IF (DateMonth(TimeCurrent()))<10 THEN mes= "0"+mes END;
dia=(DateDay(TimeCurrent()));IF (DateDay(TimeCurrent()))<10 THEN dia= "0"+dia END;
hora=TimeHour(TimeCurrent());IF TimeHour(TimeCurrent())<10 THEN hora= "0"+hora END;
minuto=TimeMin(TimeCurrent()); IF TimeMin(TimeCurrent())<10 THEN minuto= "0"+minuto END;
segundo=TimeSec(TimeCurrent());IF TimeSec(TimeCurrent())<10 THEN segundo= "0"+segundo END;
STRING pathfichero =PathToStr("[data]") + "\DBF" + ano + mes + dia + hora + Minuto + ".DBF"
TrnExportDBF(pathfichero , TimeCurrent(), 5, 60, 4, "trend001", "trend002", "trend003","trend004","trend005","trend006","trend007","trend008","trend009");
END

G ra b a r D a to s e n T a b la s d e B a s e s d e D a to s S Q L S e r v e r
R E A L v a l o r r e a l0 0 ,v a l o r r e a l0 1 ,v a lo r r e a l0 2 ,v a lo r r e a l0 3 ,v a lo r r e a l0 4 ;
R E A L v a l o r r e a l0 5 ,v a l o r r e a l0 6 ,v a lo r r e a l0 7 ,v a lo r r e a l0 8 ,v a lo r r e a l0 9 ;
/ /G r a b a r D e v ic e s
F U N C T IO N G ra b a r D e v ic e s ()
I N T i, h D e v ,in d ic e ;
/ /c a lc u lo d e l n m e r o d e s e g u n d o s p a r a in d e x a r y c o n s u lta s s q l
in d ic e = D a t e S u b ( T im e C u r r e n t( ) ,S t r T o D a te ( " 0 1 / 0 1 / 1 9 8 0 " ) );
/ /c a lc u lo d e la f e c h a y h o r a p a r a in d e x a r y c o n s u lt a s s q l
S T R I N G a n o , m e s , d i a ,h o r a ,m in u t o , s e g u n d o ;
a n o = ( D a te Y e a r ( T im e C u r r e n t ( ) ,1 ) ) ; IF ( D a te Y e a r ( T im e C u r r e n t ( ) ,1 ) ) < 1 0 T H E N a n o = " 0 " + a n o E N D ;
m e s = (D a te M o n th (T im e C u r re n t())); IF (D a te M o n th (T im e C u rre n t ()))< 1 0 T H E N m e s = " 0 " + m e s E N D ;
d ia = ( D a te D a y ( T im e C u r re n t () ) ) ;IF ( D a te D a y ( T im e C u r re n t () )) < 1 0 T H E N d ia = " 0 " + d ia E N D ;
h o r a = T im e H o u r ( T im e C u r r e n t ( ) ) ; I F T i m e H o u r ( T im e C u r r e n t ( ) ) < 1 0 T H E N h o r a = " 0 " + h o r a E N D ;
m in u t o = T im e M in ( T im e C u r r e n t ( ) ) ; I F T i m e M in ( T im e C u r r e n t ( ) ) < 1 0 T H E N m i n u t o = " 0 " + m in u t o E N D ;
s e g u n d o = T im e S e c ( T im e C u r r e n t( ) ) ; IF T im e S e c ( T im e C u r r e n t ( ) ) < 1 0 T H E N s e g u n d o = " 0 " + s e g u n d o E N D ;
S T R IN G fe c h a h o ra = "Y Y Y Y /M M /D D ;H H :M M :S S ";
f e c h a h o r a = a n o + " /" + m e s + " /" + d ia + " ;" + h o r a + " :" + m in u to + " :" + s e g u n d o ;
//c a lc u lo d e lo s v a lo r e s r e a le s
v a l o r r e a l0 0 = v a lo r r e a l0 0 + 0 . 1 ;
v a l o r r e a l0 1 = v a lo r r e a l0 0 + 0 . 2 ;
v a l o r r e a l0 2 = v a lo r r e a l0 0 + 0 . 3 ;
v a l o r r e a l0 3 = v a lo r r e a l0 0 + 0 . 4 ;
v a l o r r e a l0 4 = v a lo r r e a l0 0 + 0 . 5 ;
/ /g r a b a c i n e n la t a b la d e la b a s e d e d a t o s
h D e v = D e v O p e n ("T A B L A 1 " , 8 );
IF h D e v = -1 T H E N
D s p E rro r(" N o s e p u e d e a b rir e l D e v ic e " );
END
D e v W r ite ( h D e v , S t r T o I n t( in d ic e ) ) ;
D e v W r ite ( h D e v ,f e c h a h o r a ) ;
D e v W r it e ( h D e v , S t r T o R e a l ( v a lo r r e a l0 0 ) ) ; // C 0 0
D e v W r it e ( h D e v , S t r T o R e a l ( v a lo r r e a l0 1 ) ) ; // C 0 1
D e v W r it e ( h D e v , S t r T o R e a l ( v a lo r r e a l0 2 ) ) ; // C 0 2
D e v W r it e ( h D e v , S t r T o R e a l ( v a lo r r e a l0 3 ) ) ; // C 0 3
D e v W r it e ( h D e v , S t r T o R e a l ( v a lo r r e a l0 4 ) ) ; // C 0 4
D e v C lo s e (h D e v );
END
D iv is i n
P o n e n t e : L u is M a j
F e c h a : 1 5 /0 9 /0 6

20

Potrebbero piacerti anche