Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: vb & mysql

  1. #1
    Utente di HTML.it L'avatar di grendy
    Registrato dal
    Aug 2003
    Messaggi
    338

    vb & mysql

    Salve a tutti.

    Il problema che questa volta non mi fa dormire è il seguente:

    Come si fa una select su delle tabelle (+ di una),
    il cui nome (il nome delle tabelle) dipende dai risultati di una select.



    è possibile sta cosa?

  2. #2
    per come l'hai detta no
    almeno una tabella o una vista deve essere nota
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  3. #3
    Utente di HTML.it L'avatar di grendy
    Registrato dal
    Aug 2003
    Messaggi
    338
    mi spiego meglio (forse), ecco le table sul quale devo lavorare
    (posso modificarle se è il caso, ma contengono una mole impressionante di dati).

    tblTable(id, tblName#)
    tblName1(id, marca, codice, ...)
    tblName2(id, marca, codice, ...)
    tblName3(id, marca, codice, ...)
    tblName4(id, marca, codice, ...)
    tblName5(id, marca, codice, ...)
    tblName6(id, marca, codice, ...)
    tblNameN(id, marca, codice, ...)

    mi serve una select che prenda il/i nome/i della/e table (da tblTable)e che cerchi gli articoli sulle table tblName#

    mamma mia che ho scritto.
    :master:

  4. #4
    da quello che ho capito dovrebbe essere così

    codice:
    with TBTable as ( SELECT id
                           , nome
                           , cognome
                        FROM TB1
                      UNION ALL
                      SELECT id
                           , nome
                           , cognome
                        FROM TB2
                      UNION ALL
                      SELECT id
                           , nome
                           , cognome
                        FROM TB3
                      UNION ALL
                      ...
                     )
    SELECT * FROM TBTABLE
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  5. #5
    Utente di HTML.it L'avatar di grendy
    Registrato dal
    Aug 2003
    Messaggi
    338
    xegallo ho provato il tuo codice (ho cercato di provarlo), senza alcun risultato. mi da errore.
    potresti spiegarmelo, magari ci arrivo da solo all'errore.

    p.s. il criterio where va messo alla fine vero?
    :master:

  6. #6
    Utente di HTML.it L'avatar di cik
    Registrato dal
    Jul 2003
    Messaggi
    449
    se il numero di tabelle è fisso e devi sempre eseguire le query su tutte le tabelle, fai come ti ha suggerito xegallo, cioè unisci tutte le tabelle in una sola e poi usi quella per la query.

    Se invece devi usare i dati solo di alcune tabelle, oppure il numero di tabelle è variabile devi scriverti un po' di codice. In questo caso io farei così:

    1) apri un recordset sulla tabella tblTable in modo che contenga i nomi delle tabella da cui devi leggere i dati
    2) per ogni record nel recordset esegui una
    "INSERT INTO TbTable SELECT * FROM " + rcset.TblTable#
    che crea la tabella TbTable e inserisce i dati provenienti dalle tabelle
    3) usi TbTable per fare la tua query.


    La sintassi della select é:
    SELECT nome_campi
    FROM tabelle
    WHERE condizioni
    S'i fosse foco, arderei 'l mondo

  7. #7
    Utente di HTML.it L'avatar di grendy
    Registrato dal
    Aug 2003
    Messaggi
    338
    Si CIK devo usare i dati solo di alcune tabelle
    e inoltre il numero delle tabelle non è fisso anzi varia continuamente

    ho seguito il tuo consiglio (cik)
    tranne che per il punto due.
    non voglio affatto creare un'altra tabella (che poi mi tocca anche distruggere). In realta avevo pensato di usare una temporary table, ma poi ho risolto cosi:

    ti posto il codice, è ancora un po' pasticciato, l'ho scritto in fretta ma sembra funzionare.

    [code]

    Option Explicit

    Public Cn As New ADODB.Connection
    Public Rs As New ADODB.Recordset

    Sub connetti()
    With Cn
    'nella prima riga si specifica il provider
    'nella seconda il percorso al db
    .ConnectionString = "driver={MySQL ODBC 3.51 Driver}; " _
    & "Database=motorserver;UID=root;"
    'numero dei secondi di timeout
    .ConnectionTimeout = 5
    'tipo di cursore
    .CursorLocation = adUseClient
    'nessuna limitazione
    .Mode = adModeShareDenyNone
    'apertura ricordarsi di chiuderla
    .Open
    End With

    With Rs
    'imposta a che connessione si riferisce
    .ActiveConnection = Cn
    ' imposta il tipo di lock
    .LockType = adLockOptimistic
    End With
    End Sub

    Private Sub Form_Load()
    'dichiarazione variabili
    Dim mysql As String
    Dim Product As String
    Dim Prodotti As New ADODB.Recordset

    'connessione
    Call connetti
    With Prodotti
    'imposta a che connessione si riferisce
    .ActiveConnection = Cn
    ' imposta il tipo di lock
    .LockType = adLockOptimistic
    End With
    mysql = "select * from prodotti"
    mysql = mysql & " where marca like 'ar%'" 'esempio :-)
    Prodotti.Open mysql
    If Prodotti.RecordCount <= 0 Then
    Call MsgBox("Non ci sono prodotti" _
    & " che soddisfano questa richiesta", _
    vbOKOnly + vbInformation, "Informazioni")
    Unload Me
    End If
    Product = ""
    mysql = ""
    Prodotti.MoveFirst
    While Not Prodotti.EOF
    'prodotti
    Product = CStr(Prodotti.Fields("marca").Value)
    'select 'Prodotti'
    ' apre il recordset leggendo tutti i campi dalla _
    tabella "Product"
    If mysql <> "" Then mysql = mysql & " union all "
    'jstr(Product) lavora sul nome della tabella
    mysql = mysql & "select * from `" & JStr(Product) _
    & "` where codice like '%10%'" 'esempio :-)
    DoEvents
    Prodotti.MoveNext
    Wend

    mysql = mysql & " limit 0, 1000"
    Rs.Open mysql
    If Rs.RecordCount > 0 Then
    'riempie la vostra griglia coi dati del recorset
    Set DataGrid1.DataSource = Rs
    End If
    Prodotti.Close
    End Sub

    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    DataGrid1.DataMember = ""
    Rs.Close
    Cn.Close
    End Sub

    P.S. sono abbastanza lunghi i tempi di eseguzione, quindi, accetto consigli.

  8. #8
    Utente di HTML.it L'avatar di grendy
    Registrato dal
    Aug 2003
    Messaggi
    338
    :quote:

    Vabbè che era un po' pasticciato ma senza l'indentazione non si capisce proprio nulla, perche si vede cosi?


    e come si fa a colorare lo script (in futuro mi sara utile)?

  9. #9
    Originariamente inviato da grendy
    :quote:

    Vabbè che era un po' pasticciato ma senza l'indentazione non si capisce proprio nulla, perche si vede cosi?


    e come si fa a colorare lo script (in futuro mi sara utile)?
    questo denota il fatto il fatto che non hai letto il regolamento
    Vascello fantasma dei mentecatti nonchè baronetto della scara corona alcolica, piccolo spuccello di pezza dislessico e ubriaco- Colui che ha modificato l'orribile scritta - Gran Evacuatore Mentecatto - Tristo Mietitore Mentecatto chi usa uTonter danneggia anche te

  10. #10
    Utente di HTML.it L'avatar di cik
    Registrato dal
    Jul 2003
    Messaggi
    449
    guarda l'anteprima del messaggio prima di postarlo.
    Eviti queste situazioni
    codice:
     
    
    Option Explicit 
    
    Public Cn As New ADODB.Connection 
    Public Rs As New ADODB.Recordset 
    
    Sub connetti() 
      With Cn 
        'nella prima riga si specifica il provider 
        'nella seconda il percorso al db 
        .ConnectionString = "driver={MySQL ODBC 3.51 Driver}; " _ 
        & "Database=motorserver;UID=root;" 
        'numero dei secondi di timeout 
        .ConnectionTimeout = 5 
        'tipo di cursore 
        .CursorLocation = adUseClient 
        'nessuna limitazione 
        .Mode = adModeShareDenyNone 
        'apertura ricordarsi di chiuderla 
        .Open 
      End With  
    
      With Rs 
        'imposta a che connessione si riferisce 
        .ActiveConnection = Cn 
        ' imposta il tipo di lock 
        .LockType = adLockOptimistic 
      End With 
    End Sub 
    
    Private Sub Form_Load() 
    'dichiarazione variabili 
      Dim mysql As String 
      Dim Product As String 
      Dim Prodotti As New ADODB.Recordset 
    
      'connessione 
      Call connetti 
      With Prodotti 
        'imposta a che connessione si riferisce 
        .ActiveConnection = Cn 
        ' imposta il tipo di lock 
        .LockType = adLockOptimistic 
      End With 
      mysql = "select * from prodotti" 
      mysql = mysql & " where marca like 'ar%'" 'esempio :-) 
      Prodotti.Open mysql 
      If Prodotti.RecordCount <= 0 Then 
        Call MsgBox("Non ci sono prodotti" _ 
          & " che soddisfano questa richiesta", _ 
          vbOKOnly + vbInformation, "Informazioni") 
        Unload Me 
      End If 
      Product = "" 
      mysql = "" 
      Prodotti.MoveFirst 
      While Not Prodotti.EOF 
        'prodotti 
        Product = CStr(Prodotti.Fields("marca").Value) 
        'select 'Prodotti' 
        ' apre il recordset leggendo tutti i campi dalla _ 
        tabella "Product" 
        If mysql <> "" Then mysql = mysql & " union all " 
          'jstr(Product) lavora sul nome della tabella 
          mysql = mysql & "select * from `" & JStr(Product) _ 
          & "` where codice like '%10%'" 'esempio :-) 
          DoEvents 
          Prodotti.MoveNext 
      Wend 
    
      mysql = mysql & " limit 0, 1000" 
      Rs.Open mysql 
      If Rs.RecordCount > 0 Then 
        'riempie la vostra griglia coi dati del recorset 
        Set DataGrid1.DataSource = Rs 
      End If 
      Prodotti.Close 
    End Sub 
    
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) 
      DataGrid1.DataMember = "" 
      Rs.Close 
      Cn.Close 
    End Sub
    S'i fosse foco, arderei 'l mondo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.