German SQL - Anfängerfragen

Discussion in 'German Forum' started by peternmb, Feb 23, 2015.

  1. peternmb

    peternmb Active Member Licensed User

    Hallo,

    vielleicht kann mir jemand einigte einfache Dinge zu SQL erklären wo ich nicht durchblicke.
    Ich habe um ein Ergebnis zu erzielen einen Beispielcode etwas abgewandelt vermute jedoch das das extrem umständlich ist.
    Benötige ich die Funktion "ExecuteMemoryTable" überhaupt oder geht das einfacher?
    Code:
    ...
    Dim Table As List
    Table = ExecuteMemoryTable(SQL1,
    "SELECT * FROM table1 WHERE name = "Mayer" ORDER BY UPPER(name)"Null0)
    '
    Dim Cols() As String   
    Cols = Table.Get(
    0'1.zutreffender Datensatz
    '
    lbl01.Text=Cols(0)   
    lbl02.Text=Cols(
    1)      
    ...



    'Executes the query and returns the result as a list of arrays.
    'Each item in the list is a strings array.
    'StringArgs - Values to replace question marks in the query. Pass Null if not needed.
    'Limit - Limits the results. Pass 0 for all results.
    Sub ExecuteMemoryTable(SQL As SQL, Query As String, StringArgs() As String, Limit As Int) As List
        
    Dim cu As Cursor
        
    If StringArgs <> Null Then
            cu = 
    SQL.ExecQuery2(Query, StringArgs)
        
    Else
            cu = 
    SQL.ExecQuery(Query)
        
    End If
        
    Log("ExecuteMemoryTable: " & Query)
        
    Dim Table As List
        Table.Initialize
        
    If Limit > 0 Then Limit = Min(Limit, cu.RowCount) Else Limit = cu.RowCount
        
    For row = 0 To Limit - 1
            cu.Position = row
            
    Dim values(cu.ColumnCount) As String
            
    For col = 0 To cu.ColumnCount - 1
                values(col) = cu.GetString2(col)
            
    Next
            Table.Add(values)
        
    Next
        cu.Close
        
    Return Table
    End Sub
    Wie kann ich es erreichen, dass z.B. der bei der Suche im Beispiel der gefundene Datensatz angezeigt wird, ich aber auf alle Datensätze (nicht nur die mit dem Namen "Mayer") zugreifen kann?
     
  2. DonManfred

    DonManfred Expert Licensed User

    z.B.
    Code:
    Dim Table AsList
    Table = ExecuteMemoryTable(SQL1,
    "SELECT * FROM table1 WHERE id>0  ORDER BY UPPER(name)"Null0)
    Prinzipiell rate ich Dir aber SQL zu lernen um zu verstehen was du da machst.
     
  3. peternmb

    peternmb Active Member Licensed User

    ja, habe ich schon länger vor aber die Zeit ist einfach zu wenig...
    Ich versuche nur ein Miniprojekt umzusetzen (Datenviewer), und hatte gehofft da ich schon seit 20 Jahren mit relationalen Datenbanken arbeite, das ohne größere Einarbeitung hinzubekommen - in SQL ist aber leider fast alles anders als ich es gewohnt bin...
    In meiner gewohnten Datenbankumgebung finde ich mit z.B. seek den gesuchten Datensatz in einer indizierten DB und kann dann nach Belieben vor und zurück skippen.

    Was ist id>0 in deinem Beispielcode?
     
  4. DonManfred

    DonManfred Expert Licensed User

    das die ID größßer 0 ist... Also quasi der Filter nicht auf den Namen läuft.
    Mein Beispiel würde dann also ALLE Datensätze liefern nicht nur die mit name="Mayer"
    Du kannst auch einfach die WHERE-Bedingung komplett weglassen, dann kommen auch alle Datensätzer sofern Du sie nicht mit LIMIT limitierst.
     
  5. peternmb

    peternmb Active Member Licensed User

    Ich habe anscheinend ein Problem zu erklären was ich möchte (vermutlich funktioniert das mit SQL überhaupt nicht), ich versuche es aber trotzdem einfach nochmal:

    Ich möchte wenn ich nach dem Namen "Mayer" suche Zugriff auf alle Datensätze haben. Direkt angezeigt/eingelesen werden soll dabei der 1. vorkommende Mayer. Ich möchte allerdings in der Datenbank satzweise vor- und zurückgehen können.

    Ich stelle mir das so vor, dass in der nach dem Namen sortierten DB "Mayer" z.B. der Datensatz 500 ist, und ich dann beim rückwärtsgehen den Satz 499 oder vorwärts den Satz 501 anzeigen lassen kann.
     
  6. DonManfred

    DonManfred Expert Licensed User

    wenn du auf mayer filterst und es gibt nur einen datensatz dann kannst du nicht woanders hin blättern.
    Wenn du 10 mayer hast dann machst du doch was falsch weil deine liste dann eingentlich 10 darwbaätze habe sollte.

    Ansonsten halt ausgehend vom aktuellen datensatz (z.b. id 100) eine abfrage machen welches die nächst kleinerere id mit deinem suchbegriffen ist und dann gezielt diese datensatz laden.
    Nach vorne genau andersrum. Den nächst höheren datensatz ermitteln und den dann anzeigen.

    Sollte sich aber erledigt haben wenn Du SQL beherrschst. Das gehört nämlich alles zu den Grundlagen.
     
  7. Eumel

    Eumel Active Member Licensed User

    @peternb

    Wenn Du dir dieses Tutorial mal anschaust, und dann entsprechend abänderst.
    Z.B. statt die StudentID zu filtern und zu listen, übernimmst Du die Nachnamen.
    Dann nur noch ein Vor- und Zurück-Button, und Du solltest dein gewünschtes Ergebnis erhalten.


    ------------------
    Gruß Eumel
     
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice