DATETIME en SQLServer 2012 y PowerBuilder 12.6 - Migracion de PowerBuilder 8.0 a Powerbuilder 12.6
Publicado por Alberto (16 intervenciones) el 02/03/2017 19:43:21
DATETIME en SQLServer 2012 y PowerBuilder 12.6
Migracion de PowerBuilder 8.0 a Powerbuilder 12.6
Necesito que me ayuden estoy migrando de powerbuilder 8.0 a powerbuilder 12.6
Después de que abrí el proyecto en la versión 12.6(ya descargué el crack y está liberado) me convirtió algunas funciones automáticamente como LEN a LENA, MID a MIDA, etc.
El manejador de base de datos es SQL Server 2012 y su intercalación es SQL_Latin1_General_CP850_CI_AI en el idioma Español .
En powerbuilder utilizo el perfil de base de datos Ado .Net, y de Namespace: System.Data.SqlClient y le declaré los formatos para las fechas
El código es el siguiente:
El problema que tengo es que en la versión 12.6 cuando intento modificar algún dato en un campo de tipo DATETIME en cualquier tabla me aparece el sig. Error:
Index #0 Source; .Net SqlClient Data Provider Message: Sintaxis incorrecta cerca de '00'. Number: 102 State: 1
En el código primero en una variable STRING cuyo formato es “dd/mm/yyyy” se almacena la fecha
lsFechaCadena = "28/02/2017" // Se ha intentado también con el formato "2017-02-28"
En una variable DATE se pasa el contenido de la variable STRING a través de un cast.
lfFechaAux = DATE( lsFechaCadena )
En una variable DATETIME se pasa el contenido de la variable DATE a través de un cast.
lfFecha = DATETIME( lfFechaAux )
Se insertan los campos en una tabla de la base de datos, uno de los campos es de tipo DATETIME (de SQLServer) y su valor es almacenado a través de la variable de tipo DATETIME(de Powerbuilder). En el script del INSERT se almacena la variable DATIME, se ejecuta y sale el error anteriormente mencionado.
El código completo de la ventana en su evento open es:
El mensaje de error que sale es:
Error al guardar,
FechaAux: 28/02/2017
, Fecha: 28/02/2017 00:00:00
,Error:
Index #0 Source; .Net SqlClient Data Provider Message: Sintaxis incorrecta cerca de '00'. Number: 102 State: 1
Para hacer la ejecución correcta en lugar de incluir la variable DATETIME en la sentencia INSERT se debe incluir la variable STRING y si lo almacena en el campo de la tabla y todo bien.
Pero resulta que el proyecto que debo migrar tiene demasiadas líneas de código en las cuales se insertan o actualizan campos de tipo DATETIME debido a que es el código de un ERP.
Necesito saber cómo se debe configurar correctamente una base de datos para que ejecute las sentencias INSERT o UPDATE sin necesidad de utilizar la variable STRING en cada sentencia INSERT o UPDATE de un campo DATETIME.
Yo digo que se debe poder porque es obvio, el tipo de datos DATETIME de una variable de PowerBuilder es para que se utilice en sentencias SQL de un manejador de base de datos, y también coincide con el tipo de dato del campo de la tabla el cual es DATETIME de SQLServer.
También he utilizado ADO.Net cuyo namespace es OLE DB:
SQLCA.DBMS = "ADO.Net"
SQLCA.LogPass = " Contr4s3N1a "
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Namespace='System.Data.OleDb',Provider='SQLOLEDB',DataSource='Compu',Database='BaseDatos',DateFormat='dd/mm/yyyy',DateTimeFormat='dd/mm/yyyy hh:mi:ss.fff',TimeFormat='hh:mi:ss'"
CONNECT USING SQLCA;
Ahí el error es el siguiente:
FechaAux: 28/02/2017
, Fecha: 28/02/2017 00:00:00
, Error:
Index #0 Source; Message: Sintaxis incorrecta cerca de '00'. NativeError. 102 Source: Microsoft OLE DB Provider for SQL Server SQLState: 42000
También he utilizado SNC SQL Native Client(OLE DB)
Al crear el perfil seleccioné en el parámetro Provider: SQLNCLI11( SNC 11.0 for SQL Server 2012) obviamente porque la versión del SQLServer es 2012
SQLCA.DBMS = "SNC SQL Native Client(OLE DB)"
SQLCA.LogPass = " Contr4s3N1a "
SQLCA.ServerName = "Compu"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Database='BaseDatos',Provider='SQLNCLI11',DateFormat='dd/mm/yyyy',DateTimeFormat='dd/mm/yyyy hh:mi:ss.fff',TimeFormat='hh:mi:ss'"
CONNECT USING SQLCA;
El error usando SNC SQL Native Client es:
FechaAux: 28/02/2017
, Fecha: 28/02/2017 00:00:00
, Error:
SQLState: 42000
Microsoft SQL Server Native Client 11.0
Sintaxis incorrecta cerca de '00'.
En la versión 8.0 si lo ejecutaba bien pero en la versión 12.5 o 12.6 no lo ejecuta hay algo que me falta por favor ayúdenme.
Alguna idea de como solucionarlo??
Espero y me puedan ayudar cuanto antes porque es urgente, gracias!.
Migracion de PowerBuilder 8.0 a Powerbuilder 12.6
Necesito que me ayuden estoy migrando de powerbuilder 8.0 a powerbuilder 12.6
Después de que abrí el proyecto en la versión 12.6(ya descargué el crack y está liberado) me convirtió algunas funciones automáticamente como LEN a LENA, MID a MIDA, etc.
El manejador de base de datos es SQL Server 2012 y su intercalación es SQL_Latin1_General_CP850_CI_AI en el idioma Español .
En powerbuilder utilizo el perfil de base de datos Ado .Net, y de Namespace: System.Data.SqlClient y le declaré los formatos para las fechas
El código es el siguiente:
1
2
3
4
5
6
7
8
9
SQLCA.DBMS = "ADO.Net"
SQLCA.LogPass = "Contr4s3N1a"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Namespace='System.Data.SqlClient',DataSource='Compu',Database='BaseDatos'"+ &
",DateFormat='dd/mm/yyyy',DateTimeFormat='dd/mm/yyyy hh:mi:ss.fff',TimeFormat='hh:mi:ss'"
CONNECT USING SQLCA;
// Se abre la ventana
open( v_principal );
El problema que tengo es que en la versión 12.6 cuando intento modificar algún dato en un campo de tipo DATETIME en cualquier tabla me aparece el sig. Error:
Index #0 Source; .Net SqlClient Data Provider Message: Sintaxis incorrecta cerca de '00'. Number: 102 State: 1
En el código primero en una variable STRING cuyo formato es “dd/mm/yyyy” se almacena la fecha
lsFechaCadena = "28/02/2017" // Se ha intentado también con el formato "2017-02-28"
En una variable DATE se pasa el contenido de la variable STRING a través de un cast.
lfFechaAux = DATE( lsFechaCadena )
En una variable DATETIME se pasa el contenido de la variable DATE a través de un cast.
lfFecha = DATETIME( lfFechaAux )
Se insertan los campos en una tabla de la base de datos, uno de los campos es de tipo DATETIME (de SQLServer) y su valor es almacenado a través de la variable de tipo DATETIME(de Powerbuilder). En el script del INSERT se almacena la variable DATIME, se ejecuta y sale el error anteriormente mencionado.
El código completo de la ventana en su evento open es:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
LONG llEdad
DECIMAL ldMonto
STRING lsNombre
DATETIME lfFecha
STRING lsFechaCadena
DATE lfFechaAux
llEdad = 44;
ldMonto = 2234.89
lsNombre = "nombre"
lsFechaCadena = "28/02/2017" // "2017-02-28"
lfFechaAux = DATE( lsFechaCadena)
lfFecha = DATETIME( lfFechaAux )
MessageBox(""," FechaAux: "+STRING(lfFechaAux)+char(13)+char(13)+ &
", Fecha: "+STRING(lfFecha)+ char(13)+char(13) )
INSERT INTO tabla VALUES( :llEdad, :ldMonto, :lsNombre, :lfFecha );
IF SQLCA.SQLCODE < 0 THEN
MessageBox("Error", "Error al guardar, "+char(13)+char(13)+ &
" FechaAux: "+STRING(lfFechaAux)+char(13)+char(13)+ &
", Fecha: "+STRING(lfFecha)+ char(13)+char(13)+ &
", Error: " +char(13)+char(13)+ SQLCA.SQLERRTEXT )
close(this);
RETURN -1
ELSE
MessageBox("EXCELENTE", "TODO BIEN" )
close(this);
RETURN 1
END IF
Error al guardar,
FechaAux: 28/02/2017
, Fecha: 28/02/2017 00:00:00
,Error:
Index #0 Source; .Net SqlClient Data Provider Message: Sintaxis incorrecta cerca de '00'. Number: 102 State: 1
Para hacer la ejecución correcta en lugar de incluir la variable DATETIME en la sentencia INSERT se debe incluir la variable STRING y si lo almacena en el campo de la tabla y todo bien.
Pero resulta que el proyecto que debo migrar tiene demasiadas líneas de código en las cuales se insertan o actualizan campos de tipo DATETIME debido a que es el código de un ERP.
Necesito saber cómo se debe configurar correctamente una base de datos para que ejecute las sentencias INSERT o UPDATE sin necesidad de utilizar la variable STRING en cada sentencia INSERT o UPDATE de un campo DATETIME.
Yo digo que se debe poder porque es obvio, el tipo de datos DATETIME de una variable de PowerBuilder es para que se utilice en sentencias SQL de un manejador de base de datos, y también coincide con el tipo de dato del campo de la tabla el cual es DATETIME de SQLServer.
También he utilizado ADO.Net cuyo namespace es OLE DB:
SQLCA.DBMS = "ADO.Net"
SQLCA.LogPass = " Contr4s3N1a "
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Namespace='System.Data.OleDb',Provider='SQLOLEDB',DataSource='Compu',Database='BaseDatos',DateFormat='dd/mm/yyyy',DateTimeFormat='dd/mm/yyyy hh:mi:ss.fff',TimeFormat='hh:mi:ss'"
CONNECT USING SQLCA;
Ahí el error es el siguiente:
FechaAux: 28/02/2017
, Fecha: 28/02/2017 00:00:00
, Error:
Index #0 Source; Message: Sintaxis incorrecta cerca de '00'. NativeError. 102 Source: Microsoft OLE DB Provider for SQL Server SQLState: 42000
También he utilizado SNC SQL Native Client(OLE DB)
Al crear el perfil seleccioné en el parámetro Provider: SQLNCLI11( SNC 11.0 for SQL Server 2012) obviamente porque la versión del SQLServer es 2012
SQLCA.DBMS = "SNC SQL Native Client(OLE DB)"
SQLCA.LogPass = " Contr4s3N1a "
SQLCA.ServerName = "Compu"
SQLCA.LogId = "sa"
SQLCA.AutoCommit = False
SQLCA.DBParm = "Database='BaseDatos',Provider='SQLNCLI11',DateFormat='dd/mm/yyyy',DateTimeFormat='dd/mm/yyyy hh:mi:ss.fff',TimeFormat='hh:mi:ss'"
CONNECT USING SQLCA;
El error usando SNC SQL Native Client es:
FechaAux: 28/02/2017
, Fecha: 28/02/2017 00:00:00
, Error:
SQLState: 42000
Microsoft SQL Server Native Client 11.0
Sintaxis incorrecta cerca de '00'.
En la versión 8.0 si lo ejecutaba bien pero en la versión 12.5 o 12.6 no lo ejecuta hay algo que me falta por favor ayúdenme.
Alguna idea de como solucionarlo??
Espero y me puedan ayudar cuanto antes porque es urgente, gracias!.
Valora esta pregunta
0