Inicio    Contáctenos  Qué es DatoSoft Descargas


Datos y Software - Soluciones

 

DatoSoft


Datos y Software - Soluciones

 

 

Ir a otros temas...

 

Titulo del tema



INTRODUCCION

pendiente de editar

CONTENIDO

 

 

Para que el DBD32.exe no fallé tanto haciendo los SQL de los colegios, toca
ampliar los parámetros de configuración del BDE. Los duplique todos y dejó de poner problemas.


*** ---- ****
El archivo cabecera para usar el IDAPI directamente en C++ Builder
es bde.hpp, en él los codigo de error están en decimal,
por ejemplo: $2109 (hex) está como 8457 (decimal). Consultar cuando
algo falla al iniciar el engine (no olvidar convertir a decimal).

Por ejemplo para llamar a la función que nos muestre los mensajes de
error del BDE (No halla dll's etc.):

//#include <bde.hpp> no es necesario pues la VCL ya lo incluye
// y directamente (a menos que no estemos usando componentes VCL)
DbiGetErrorString(Word rslt, char * pszError);
o DbitalCosa etc
Ver asientos.cpp en contador.


PonePasswordTablasParadox\main.cpp es un buen ejemplo de uso directo del bde
sin utilizar la VCL

http://info.borland.com/devsupport/bde/ es la pagina oficial

Para que el orden en las tablas cuando tienen llave sea igual al del SQL
poner en el BDE configuration, language=ASCII, ansi

*** ---- ****
Trabajo en red:
Se tiene una aplicación en red con un dbgrid, pero al dar refresh no
se actualiza. Debe configurarse el BDE en la página system local_shared
true en el equipo donde están las tablas.

Si se está trabajando local, puede sacar un mensaje de error que el
archivo tal está controlado por otro net, borrar los archivos lock
antes de empezar.

Sin embargo si se hace un ciclo sobre una tabla grande y en cada
vuelta se hace un SQL por ejemplo para sumar valores, la aplicacion
falla con mensajes como:
lock file has grown too large
Operation not aplicable (engine 3.0)
SOLUCION HACER UN SOLO SQL sumando todo con group by antes del ciclo
y luego recorrer el query obteniendo las sumas, por ejemplo.

*** ---- ****
Fechas:
El DataBase Desktop toma el formato de fecha de la configuración
regional del panel del control, lo mismo que las aplicaciones hechas
en C++ Builder que utilizan el BDE.
Pero el lenguaje SQL espera siempre las fechas como mm/dd/aaaa
independientemente de las otras configuracines
El parametro mode de la página de configuración del engine no hace
nadda!

*** ---- ****
Si sale que se está controlado por otro net directory, es que existen
unos archivos pdoxlock y paradox userx lock, en el directorio donde
están las tablas, puede ser local o remoto en un servidor. BORRARLOS.


*** ---- ****
Para colocar un campo en blanco, sin ningun valor:
TblFacturas->FieldByName("FPago")->Clear();


*** ---- ****
Si se quiere tomar la información de un registro antes de que la
cambien, debe utilizarse BeforeEdit()
Despues, en otro evento, (BeforePost etc.) se puede chequear contra el
valor que le pusieron para ver si lo cambiaron. Ver Ejemplo en
ConsFacturacion.cpp del proyecto agua.

*** ---- ****
Para que al dar click en un edit con el mouse quede en el primer
caracter basta con colocarse su texto="". No se puede con el maskedit.


*** ---- ****
Para mandar un caracter del teclado a la cola de mensajes del control
SendMessage(EdIUsuario->Handle,WM_CHAR,'G',1);
EdIUsuario->Update();

*** ---- ****
Se puede hacer un SQL con TQuery y conectarlo con un datasource a un
grid, permitiendo que cambien los datos directamente en la tabla de
donce se sacó el query. Para esto colocar la propiedad RequestLive=
true.


*** ---- ****
Para hacer lookup:
V=DataModule1->TblUsuarios->Lookup("IUsuario", aIUsuario,
"NUsuario;TDireccion;IServicio;IEstrato;TNumMedidor;QDiametro");
if (!V.IsNull()) {
/* Variant: Array manipulation
Use these the GetElement and PutElement functions to access variant arrays.
Array subscript operator is private and can be used only with arrays of
variants*/
/*
Result= true;
aDatosUsuario->NUsuario=V.GetElement(0);
aDatosUsuario->TDireccion=V.GetElement(1);
aDatosUsuario->IServicio=V.GetElement(2);
aDatosUsuario->IEstrato=V.GetElement(3);
aDatosUsuario->TNumMedidor=V.GetElement(4);
aDatosUsuario->QDiametro=V.GetElement(5);
}

En el BDE hay un BUG, que hace fallar un SQL que contenga en un select
una suma de campos, por ej:
select a,b,c,a+b+c from ....
Si en esos campos no hay información, toca ponerle a la tabla un archivo
VAL, que obligue a que en los campos el default sea cero.

OJO OJO Para operaciones es importante indicar el tipo de dato con un
punto, de lo contrario el resultado de una division puede dar cero al
tomarlo como entero:
select sum (valocomp * existencia*(1+iva/100.))
from infoarti

Es muy distinto si no se le coloca el punto al 100


*** ---- ****
Unknown error operating system
La tabla se deja abrir pero no se deja hacer pack ni tampoco reparar con
las utilidades reparadoras.
Toca crear una nueva con la misma estructura (o a traves de borrow si
hay otra buena con la misma estructura auncuando con distintos datos).
Y luego con el database deskptop utilities-add.


***
Antes de hacerle pack a una tabla sospechosa de estar dañada, debe hacérsele
reestructure con tutil, pues con el pack se puede perder muchísimos
registros


*** ---- ****
IDAPI.CFG

The IDAPI.CFG file was created and maintained with the 16 bit BDE Administrator and is now fixed. (The 32-bit BDE Administrator only modifies the IDAPI32.CFG config file, and on our system it points to the same locations). In earlier releases, there is a utility called IDAPICFG.exe which actually modifies the IDAPI.CFG file.

This config file specifies a shared "Net Directory" location. This is where Paradox places the network-wide database access control file "pdoxusrs.NET" file. This file is the Paradox way to manage user connections to a database. It would be interesting to look at these implications in the 32-bit BDE system as it adds the further complications of Tsession and multi-threading.

The system-wide access-control file "pdoxusrs.LCK" file is placed in the directory where tables are found, hence into the "Data" directory. This is where table and record locks are managed.

The last (but not least) important configuration issue is that no single BDE-based application must be allowed to start in the network folder where they are called from, or in the data folder. To sort this out, we ensure that all shortcuts specify C:\PRIVATE as the application’s working directory.

How?

Each workstation is set up with a designated directory already created. We name it "C:\PRIVATE". This folder is also included in the Paradox configuration as the location of the :PRIV private directory for the BDE. This is where the BDE will direct each user-mode lock file ("pdoxusrs.LCK"), as well as all temporary and answer tables. So-called "user—mode" lock files are created by queries which output to temporary DB files.

This avoids mixing up the user-mode lock files and system-wide lock files, as well as avoiding simultaneous access to the temporary tables created during queries (usually these have file names starting with 2 underscores).

Apart from lock file corruption during some of the particularly busy times described above, there is occasional table corruption, but the consensus and our experience proves that this is actually benign compared with other database systems.

As the system is not client-server or n-tier, table updates are workstation-driven. If the workstation crashes (power glitch, OS freezing, user reboot, etc), a crash can leave either the lock file in tatters or corrupt database tables, usually index files.

The lock file corruption is discussed in Lock file hints.
*** ---- ****