vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
sevDataGrid - Gönnen Sie Ihrem SQL-Kommando diesen krönenden Abschluß!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Re: Status der Datenbankabfrage 
Autor: spike24
Datum: 25.02.05 17:52

habe da was gebastelt
bei DaveS version muss man die tabelle wissen, da ich aber immer nur an ne Funktion einen SQLString übergebe, wäre diese möglichkeit fast flachgefallen, fast aber nur
habe ne funktion geschreiben die mir den CountString liefert, egal wie der SQLString aussieht, unterSelects und IIF-Kompatible
der restliche teil fehlt aber noch, da ich jetzt mein system ein bisschen umbauen muss, damit ich da nen progressbar drin habe
falls jemand meint das sei nicht sauber programmiert, gebe ich ihm recht

    Private Shared Function GetPrimaryField(ByVal SQLString As String) As String
        Return SQLString.Remove(0, 7).Split(" ")(0).Replace(",", "")
    End Function
 
    Private Shared Function Del_GROUP_ORDER(ByVal SQLString As String) As String
        Dim pos As Integer
            pos = SQLString.IndexOf("GROUP BY")
            If pos <> -1 Then
                SQLString = SQLString.Remove(pos, SQLString.Length - pos)
            End If
 
            pos = SQLString.IndexOf("ORDER BY")
            If pos <> -1 Then
                SQLString = SQLString.Remove(pos, SQLString.Length - pos)
        End If
        Return SQLString
    End Function
 
    Private Shared Function Replace_FieldList_to_Count(ByVal SQLString As _
      String, ByVal PrimaryField As String) As String
        ' die feld liste durch COUNT() austauschen
 
        ' ich 
        Dim pos As Integer
        Dim posKlAuf As Integer
        Dim posKlZu As Integer
        Dim posFrom As Integer
        Dim anzKl As Integer
        Dim aktPos As Integer
        Dim uSelBeg As Integer
 
 
        Do While 1
 
            posKlAuf = SQLString.IndexOf("(")
            posFrom = SQLString.IndexOf("FROM")
            If posKlAuf <> -1 Then
                If posKlAuf < posFrom Then
                    ' es gibt einen unterselect im Fieldstring
                    uSelBeg = posKlAuf
                    anzKl = 1
                Else
                    Exit Do
                End If
            Else
                Exit Do
            End If
 
            ' unterselect entfernen
 
            aktPos = uSelBeg + 1
 
            Do While anzKl <> 0
 
                posKlAuf = SQLString.IndexOf("(", aktPos)
                posKlZu = SQLString.IndexOf(")", aktPos)
                If posKlAuf = -1 Then posKlAuf = posKlZu + 1
                If posKlAuf < posKlZu Then
                    anzKl += 1
                    aktPos = posKlAuf + 1
                Else
                    anzKl -= 1
                    aktPos = posKlZu + 1
                End If
            Loop
            SQLString = SQLString.Remove(uSelBeg - 1, posKlZu - uSelBeg + 2)
        Loop
 
        pos = SQLString.IndexOf(" FROM")
        Return SQLString.Replace(SQLString.Substring(6, pos), " COUNT(" & _
          PrimaryField & ") ")
 
    End Function
 
    Public Shared Function CreateDataTable(ByVal SELECTString As String) As _
      DataTable
        Try
            ' beim SELECTString die felder rausschneiden und die anzahl der 
            ' datensätze herausfinden die geladen werden soll
            'SELECT LfdNr FROM Personen
            Dim PrimaryField As String
            Dim CountString As String, tmpString As String
            ' bei meiner datenbank heissen die ID felder z.b. LfdNr_Pers
            ' funktioniert nicht bei Select * FROM 
            ' das PrimaryFeld muss an erster stelle stehen
            If SELECTString.StartsWith("SELECT LfdNr_") = True Then
 
                tmpString = SELECTString
                ' LfdNr_ feld auslesen
                PrimaryField = GetPrimaryField(tmpString)
 
                ' GROUP BY und ORDER BY rausschneiden
                tmpString = Del_GROUP_ORDER(tmpString)
 
                CountString = Replace_FieldList_to_Count(tmpString, _
                  PrimaryField)
 
            End If
0
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Status der Datenbankabfrage1.600Spassmann24.02.05 19:37
Re: Status der Datenbankabfrage1.306Maywood24.02.05 20:23
Re: Status der Datenbankabfrage1.980ModeratorDaveS24.02.05 20:33
Re: Status der Datenbankabfrage1.289spike2424.02.05 20:41
Re: Status der Datenbankabfrage1.248ModeratorDaveS24.02.05 20:55
Re: Status der Datenbankabfrage1.154spike2424.02.05 20:57
Re: Status der Datenbankabfrage1.155ModeratorDaveS24.02.05 21:02
Re: Status der Datenbankabfrage1.192spike2424.02.05 21:03
Re: Status der Datenbankabfrage1.369ModeratorDaveS24.02.05 21:10
Re: Status der Datenbankabfrage1.248spike2424.02.05 21:28
Re: Status der Datenbankabfrage1.206ModeratorDaveS24.02.05 21:34
Re: Status der Datenbankabfrage1.208spike2424.02.05 21:40
Re: Status der Datenbankabfrage1.113Maywood24.02.05 20:45
Re: Status der Datenbankabfrage1.291spike2425.02.05 17:52
Re: Status der Datenbankabfrage1.190ModeratorDaveS25.02.05 18:51
Re: Status der Datenbankabfrage1.244Spassmann25.02.05 17:09
Re: Status der Datenbankabfrage1.378ModeratorDaveS25.02.05 17:53
Re: Status der Datenbankabfrage1.289Maywood25.02.05 19:04
Re: Status der Datenbankabfrage1.438ModeratorDaveS25.02.05 19:14
Re: Status der Datenbankabfrage1.341Spassmann26.02.05 12:42

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel