Offerte, etc.
This commit is contained in:
@@ -318,7 +318,7 @@ Public Class cProgramFunctions
|
|||||||
Case 1, 7 : Return openThereforeNavigatorZollvollmachten_DE(KundenNr)
|
Case 1, 7 : Return openThereforeNavigatorZollvollmachten_DE(KundenNr)
|
||||||
Case 2, 8 : Return openThereforeNavigatorFiskalVM_DE(KundenNr)
|
Case 2, 8 : Return openThereforeNavigatorFiskalVM_DE(KundenNr)
|
||||||
Case 4, 9 : Return openThereforeNavigatorFiskalVM_AT(KundenNr)
|
Case 4, 9 : Return openThereforeNavigatorFiskalVM_AT(KundenNr)
|
||||||
Case 12, 13 : Return openThereforeNavigatorVM_AT(KundenNr)
|
'Case 12, 13 : Return openThereforeNavigatorVM_AT(KundenNr)
|
||||||
End Select
|
End Select
|
||||||
Return False
|
Return False
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
@@ -960,10 +960,8 @@ Public Class cStandardofferten
|
|||||||
Property BGebMinBetrag As Object = Nothing
|
Property BGebMinBetrag As Object = Nothing
|
||||||
Property BerechnungsartPosInkludiert As Object = Nothing
|
Property BerechnungsartPosInkludiert As Object = Nothing
|
||||||
Property BerechnungsartNr As Object = Nothing
|
Property BerechnungsartNr As Object = Nothing
|
||||||
|
|
||||||
Property LeistungsBez_EN As Object = Nothing
|
Property LeistungsBez_EN As Object = Nothing
|
||||||
Property LeistungsBez_RO As Object = Nothing
|
Property LeistungsBez_RO As Object = Nothing
|
||||||
|
|
||||||
Property LeistungsBez_TR As Object = Nothing
|
Property LeistungsBez_TR As Object = Nothing
|
||||||
|
|
||||||
Public hasEntry = False
|
Public hasEntry = False
|
||||||
|
|||||||
@@ -367,24 +367,23 @@ Public Class cProgramFunctions
|
|||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Public Shared Function ValidateSQLFieldLengths(parameters As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable), tableName As String, Info As String, Optional conn_art As String = "FMZOLL", Optional showError As Boolean = True) As Boolean
|
Public Shared Function ValidateSQLFieldLengths(parameters As List(Of VERAG_PROG_ALLGEMEIN.SQLVariable), tableName As String, Info As String, Optional conn_art As String = "FMZOLL", Optional showError As Boolean = True) As Boolean
|
||||||
|
|
||||||
Try
|
Try
|
||||||
|
|
||||||
Dim sql As String =
|
Dim sql As String =
|
||||||
"SELECT COLUMN_NAME, CHARACTER_MAXIMUM_LENGTH FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" & tableName & "' AND DATA_TYPE IN ('varchar','nvarchar','char','nchar')"
|
"SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, NUMERIC_PRECISION, NUMERIC_SCALE
|
||||||
|
FROM INFORMATION_SCHEMA.COLUMNS
|
||||||
|
WHERE TABLE_NAME = '" & tableName & "'
|
||||||
|
AND DATA_TYPE IN ('varchar','nvarchar','char','nchar','decimal','numeric','float','real')"
|
||||||
|
|
||||||
Dim dt As DataTable =
|
Dim dt As DataTable =
|
||||||
(New SQL).loadDgvBySql(sql, conn_art)
|
(New SQL).loadDgvBySql(sql, conn_art)
|
||||||
|
|
||||||
If dt Is Nothing Then Return False
|
If dt Is Nothing Then Return False
|
||||||
|
|
||||||
Dim fieldLengths As New Dictionary(Of String, Integer)(StringComparer.OrdinalIgnoreCase)
|
' Struktur für Feldinfos
|
||||||
|
Dim fieldInfo As New Dictionary(Of String, DataRow)(StringComparer.OrdinalIgnoreCase)
|
||||||
|
|
||||||
For Each r As DataRow In dt.Rows
|
For Each r As DataRow In dt.Rows
|
||||||
|
fieldInfo(r!COLUMN_NAME.ToString) = r
|
||||||
fieldLengths(r!COLUMN_NAME.ToString) =
|
|
||||||
CInt(r!CHARACTER_MAXIMUM_LENGTH)
|
|
||||||
|
|
||||||
Next
|
Next
|
||||||
|
|
||||||
Dim errors As New List(Of String)
|
Dim errors As New List(Of String)
|
||||||
@@ -397,41 +396,89 @@ Public Class cProgramFunctions
|
|||||||
|
|
||||||
Dim fieldName As String = p.Text().TrimStart("@"c)
|
Dim fieldName As String = p.Text().TrimStart("@"c)
|
||||||
|
|
||||||
If Not fieldLengths.ContainsKey(fieldName) Then Continue For
|
If Not fieldInfo.ContainsKey(fieldName) Then Continue For
|
||||||
|
|
||||||
Dim maxLen As Integer = fieldLengths(fieldName)
|
Dim row As DataRow = fieldInfo(fieldName)
|
||||||
|
Dim dataType As String = row!DATA_TYPE.ToString.ToLower
|
||||||
|
|
||||||
' varchar(max) / nvarchar(max)
|
Dim valueObj As Object = p.Value()
|
||||||
If maxLen = -1 Then Continue For
|
Dim valueStr As String = valueObj.ToString
|
||||||
|
|
||||||
Dim value As String = p.Value().ToString
|
' -------------------------
|
||||||
|
' 1) TEXTFELDER
|
||||||
|
' -------------------------
|
||||||
|
If dataType.Contains("char") Then
|
||||||
|
|
||||||
If value.Length > maxLen Then
|
Dim maxLen As Integer = If(IsDBNull(row!CHARACTER_MAXIMUM_LENGTH), -1, CInt(row!CHARACTER_MAXIMUM_LENGTH))
|
||||||
|
|
||||||
errors.Add(fieldName & " -> " & value.Length & "/" & maxLen)
|
If maxLen = -1 Then Continue For ' varchar(max)
|
||||||
|
|
||||||
|
If valueStr.Length > maxLen Then
|
||||||
|
errors.Add(fieldName & " -> " & valueStr.Length & "/" & maxLen)
|
||||||
|
End If
|
||||||
|
|
||||||
|
End If
|
||||||
|
|
||||||
|
' -------------------------
|
||||||
|
' 2) NUMERISCHE FELDER
|
||||||
|
' -------------------------
|
||||||
|
If dataType = "decimal" OrElse dataType = "numeric" OrElse dataType = "float" OrElse dataType = "real" Then
|
||||||
|
|
||||||
|
Dim decValue As Decimal
|
||||||
|
|
||||||
|
If Not Decimal.TryParse(valueStr, Globalization.NumberStyles.Any,
|
||||||
|
Globalization.CultureInfo.InvariantCulture, decValue) Then
|
||||||
|
|
||||||
|
errors.Add(fieldName & " -> Ungültiger numerischer Wert: " & valueStr)
|
||||||
|
Continue For
|
||||||
|
End If
|
||||||
|
|
||||||
|
' decimal / numeric prüfen (Precision/Scale)
|
||||||
|
If dataType = "decimal" OrElse dataType = "numeric" Then
|
||||||
|
|
||||||
|
Dim precision As Integer = If(IsDBNull(row!NUMERIC_PRECISION), 0, CInt(row!NUMERIC_PRECISION))
|
||||||
|
Dim scale As Integer = If(IsDBNull(row!NUMERIC_SCALE), 0, CInt(row!NUMERIC_SCALE))
|
||||||
|
|
||||||
|
Dim parts = decValue.ToString(Globalization.CultureInfo.InvariantCulture).Split("."c)
|
||||||
|
|
||||||
|
Dim digitsBefore As Integer = parts(0).Replace("-", "").Length
|
||||||
|
Dim digitsAfter As Integer = If(parts.Length > 1, parts(1).Length, 0)
|
||||||
|
|
||||||
|
If digitsBefore + digitsAfter > precision OrElse digitsAfter > scale Then
|
||||||
|
errors.Add(fieldName & " -> " & decValue &
|
||||||
|
" überschreitet precision/scale (" & precision & "," & scale & ")")
|
||||||
|
End If
|
||||||
|
End If
|
||||||
|
|
||||||
|
' float/real -> Catch Overflow ähnlich SQL Server Verhalten
|
||||||
|
If dataType = "float" OrElse dataType = "real" Then
|
||||||
|
Try
|
||||||
|
Dim test As Double = CDbl(decValue)
|
||||||
|
Catch
|
||||||
|
errors.Add(fieldName & " -> Float/Real Überlauf: " & valueStr)
|
||||||
|
End Try
|
||||||
|
End If
|
||||||
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Next
|
Next
|
||||||
|
|
||||||
If errors.Count > 0 Then
|
If errors.Count > 0 Then
|
||||||
Info = "Folgende SQL-Felder sind zu lang:" & vbCrLf & vbCrLf & String.Join(vbCrLf, errors)
|
Info = "Folgende SQL-Felder sind ungültig:" & vbCrLf & vbCrLf &
|
||||||
|
String.Join(vbCrLf, errors)
|
||||||
|
|
||||||
If showError Then
|
If showError Then
|
||||||
MsgBox(Info, MsgBoxStyle.Exclamation)
|
MsgBox(Info, MsgBoxStyle.Exclamation)
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Return False
|
Return False
|
||||||
|
|
||||||
End If
|
End If
|
||||||
|
|
||||||
Return True
|
Return True
|
||||||
|
|
||||||
Catch ex As Exception
|
Catch ex As Exception
|
||||||
|
|
||||||
MsgBox("ValidateSQLFieldLengths:" & vbCrLf & ex.Message)
|
MsgBox("ValidateSQLFieldLengths:" & vbCrLf & ex.Message)
|
||||||
|
Return False
|
||||||
Return False
|
|
||||||
|
|
||||||
End Try
|
End Try
|
||||||
|
|
||||||
End Function
|
End Function
|
||||||
|
|||||||
Reference in New Issue
Block a user