Hi!
I’ve just read this topic:" Sql INSERT error: name longer than db col size", which is almost the same as I have, but in my case is not when I try to insert data by SQL directly. In my case is tryin to copy the structure of a table (a calc sheet in this case) by driver, and the message is the same.
I supose the case is the same, but I don’t know how to manipulate the driver (the code) to work with simple quotes.
The error message apears when the code raises the last row I’ve wrote down
' CREATE DESCRIPTOR
' Modificado por SLV-es
Dim n As Integer, c As String
n = 1
c = ""
Do While True
If Tables.hasByName(TableName & c) Then
c = "_" & n
n=n+1
Else
TableName = TableName & c
Exit Do
End If
Loop
' Fin de modificación
TableDescriptor=Tables.createDataDescriptor()
TableDescriptor.Name=TableName
Columns=TableDescriptor.Columns
If IsMissing(PKColumn) Then
PKColumn=-1
End if
If PKColumn<0 OR PKColumn>=ResultSet.MetaData.getColumnCount() Then
pkColumn=-1
End if
DataTypes=com.sun.star.sdbc.DataType
ColumnValues=com.sun.star.sdbc.ColumnValue
KeyTypes=com.sun.star.sdbcx.KeyType
If PKColumn<0 Then
ColumnDescriptor=Columns.createDataDescriptor()
PKName=TableName & "_PK"
With ColumnDescriptor
.Name=PKName
.Type=DataTypes.INTEGER
.IsNullable=ColumnValues.NO_NULLS
.IsAutoIncrement=True
End With
Columns.appendByDescriptor(ColumnDescriptor)
Else
PKName=ResultSet.MetaData.getColumnName(PKColumn)
End If
Dim tt,nn
For i=1 To ResultSet.MetaData.getColumnCount()
ColumnDescriptor=Columns.createDataDescriptor() ' Just reset every time
With ColumnDescriptor
.Name=ResultSet.MetaData.getColumnlabel(i)
.Type=ResultSet.MetaData.getColumnType(i)
' modificado SLV-es
If .Type = 3 Then .Type = 8 ' forzar números tipo decimal a double
' http://docs.oracle.com/javase/1.4.2/docs/api/constant-values.html#java.sql.Types.DOUBLE
' fin modificación
.IsNullable=ResultSet.MetaData.isNullable(i)
.Description=ResultSet.MetaData.getColumnLabel(i)
.IsAutoIncrement=ResultSet.MetaData.isAutoIncrement(i)
.IsCurrency=ResultSet.MetaData.isCurrency(i)
Precision=ResultSet.MetaData.getPrecision(i)
If precision<1 Then
Precision=5
End If
' modificado SLV-es
If .type = 1 OR .type = 12 Then Precision = 400 ' forzar tipo texto a 400 de longitud
' fin modificación
.Precision=Precision
.Scale=ResultSet.MetaData.getScale(i)
.Width=ResultSet.MetaData.getColumnDisplaySize(i)
End With
Columns.appendByDescriptor(ColumnDescriptor)
Next i
' CREATE KEY
Keys=TableDescriptor.Keys
KeyDescriptor=Keys.createDataDescriptor()
KeyDescriptor.Type=KeyTypes.PRIMARY
KeyDescriptor.Name=PKName
KeyColumns=KeyDescriptor.Columns
ColumnDescriptor=KeyColumns.createDataDescriptor()
ColumnDescriptor.Name=PKName
KeyColumns.appendByDescriptor(ColumnDescriptor)
Keys.AppendByDescriptor(KeyDescriptor)
' Finally, append table to table supplier
Tables.appendByDescriptor(TableDescriptor)