Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1

    Una sequenza che non visualizza i dati - DataCommand1.RecordCount("nome_campo1")

    Salve,
    ho superato il primo problema di collegamento al database e sto revisionando le asp passando da SQL a MySql per non voler buttare via tutto il lavoro di 8 anni e magari studiare php, ma ci vuole un po' di tempo.
    Mi accingo ora a combattere con la seconda fase.
    Questo il mio problema alla luce della seguente query :
    cmdTemp.CommandText = "SELECT DATA1 + ' ' + Dscrizione AS DATA_M FROM hunde3 INNER JOIN nazioni ON hunde3.NAZIONE = nazioni.Sigla_Nazione GROUP BY DATA1, nazioni.Dscrizione ORDER BY DATA1 DESC, nazioni.Dscrizione DESC"

    Devo presentare la lista delle date per poi avere la possibilità di selezionarne una a piacimento e continuare in un'ulteriore ricerca
    Ho queste istruzioni, ma visualizzano un bel niente(spazio vuoto) :

    <form action="_file.asp" method="POST">
    <input type="hidden" name="From" value="0">
    <table>
    <tr>
    <td>
    <select name="SEX" size="1">
    <option selected value="M">Maschi</option>
    <option value="F">Femmmine</option>
    </select>
    </td>
    <td>
    <select name="CLASSE" size="1">
    <option selected value="GHKL">Adulti/e (GHKL)</option>
    <option value="JHKL">Giovani/e (JHKL)</option>
    <option value="JKL">Giovanissimi/e (JKL)</option>
    </select>
    </td>
    <td>
    <select name="DATA_ESPOSIZIONE" size="1">
    <%For i=1 to DataCommand1.RecordCount%>
    <%Lun=InStr(1,DataCommand1("DATA_M")," ")
    DataMan=Left(DataCommand1("DATA_M"),Lun - 1)
    If IsDate(DataMan) Then%>
    <option value="<%=DataMan%>">
    <font color="#000000"><%=DataCommand1("DATA_M")%></font>
    </option>
    <%End If
    DataCommand1.MoveNext
    Next%>
    </select>

    </td>
    <tr>
    </table>
    </imput>
    </form>

    Se peró inserisco <%=DataCommand1("DATA_M")%> per esempio
    posso vedere l'ultima data nel seguente formato forse del primo record trovato, perchè sono sicuro che questa è l'ultima data in ordine decrescente

    annomesegiornooreminutisecondi
    esempio 20040926000000

    Aiutino grazie

  2. #2
    Con il gruppo di istruzioni
    Lun=InStr(1,DataCommand1("DATA_M")," ")
    DataMan=Left(DataCommand1("DATA_M"),Lun - 1)
    If IsDate(DataMan) Then ....
    memorizzi nella variabile Lun la posizione dello spazio vuoto nella stringa contenuta in DataCommand1("DATA_M") a partire dal suo inizio, poi memorizzi in DataMan la sottostringa esistente a sinistra di quella posizione in DataCommand1("DATA_M").
    Infine, se quella sottostringa è una data .... (la usi come valore da passare per il campo DATA_ESPOSIZIONE del form, che è una lista dei valori contenuti in DataCommand1("DATA_M"))

    Se, come sembra dall'esempio che fai, DataCommand1("DATA_M") non contiene spazi vuoti, Lun vale 0 e a sinistra di questa posizione, in DataCommand1("DATA_M") non c'è nulla........ma, in tal caso, il browser dovrebbe restituirti un messaggio di errore.

    Se, invece, DataMan è valorizzata, la lista viene popolata solo nel caso che il contenuto di DataMan sia una data.....controlla che il server, per le sue impostazioni, la riconosca come tale.

    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  3. #3
    Vediamo se ho capito e controllato bene.

    1) La variabile DATA_M ottenuta con il SELECT va a prendere i dati da due tabelle mettendoli insieme AS ... FROM
    2) Il primo dato è il contenuto del campo DATA1 che è nella tabella hunde3 ed è un campo datetime mai vuoto perchè se non ci fosse la data avrebbe di default 0000-00-00 00:00 in quanto l'ho impostato con NOT NULL ed è un indice
    3) il secondo dato è la sigla del campo Sigla_Nazione ottenuta dalla tabella nazioni
    4) Ora perchè non visualizza la lista delle date ?
    5) Dove devo controllare nel server le impostazioni di DataMan affinchè la riconosca come data ?

  4. #4
    Ho ricontrollato il campo DATA1 nella tabella ed effettivamente era di tipo 'datetime'
    L'ho modificato in tipo 'date' ed ho inserito nel file asp prima di

    <select name="DATA_ESPOSIZIONE" size="1">
    <%For i=1 to DataCommand1.RecordCount%>
    <%Lun=InStr(1,DataCommand1("DATA_M")," ")
    DataMan=Left(DataCommand1("DATA_M"),Lun -1)
    If IsDate(DataMan) Then%>
    <option value="<%=DataMan%>">
    <font color="#000000"><%=DataCommand1("DATA_M")%></font>
    </option>
    <%End If
    DataCommand1.MoveNext
    Next%>
    </select>

    quanto qui sotto
    per vedere quali valori/dati vengono visualizzati



    <%varData = DATA_M
    Response.Write(formatDateTime(varData, vbShortDate))%>



    <%=DataCommand1("DATA_M")%>



    Vengono visualizzate due valori :
    il primo è una data (la prima che trova nella tabella : 12/30/1899)
    il secondo è 20040926 che potrebbe essere una data valida sulla base
    della query cmdTemp.CommandText=
    dove c'è e viene chiesto ORDER BY DATA1 DESC

    In considerazione di quello che ho fatto, modificando il tipo di campo da 'datetime' a 'date' non riesco ancora a far vedere la lista delle date di tutta la tabella come da istruzioni
    <select name="DATA_ESPOSIZIONE" size="1">
    eccetera....

  5. #5
    Se hai modificato il campo da datetime a date ed effettivamente ciò che vedi, quando ne stampi il contenuto, è una data, per popolare la select list dovrebbe funzionare questo semplice ciclo di istruzioni:
    codice:
    <select name="DATA_ESPOSIZIONE" size="1"> 
    <%
    DataCommand1.MoveFirst
    For i=1 to DataCommand1.RecordCount
    %> 
    <option value="<%=DataCommand1("DATA_M")%>"> 
    <%=DataCommand1("DATA_M")%> 
    </option> 
    <%
    DataCommand1.MoveNext 
    Next
    %> 
    </select>
    Posizioni il cursore sul primo record del tuo recordset. Poi, per tutti i record, il valore visualizzato nella lista è quello contenuto nel campo DATA_M, e così pure il valore passato quando inoltri il form.....

    Alcuni punti mi erano (e in parte mi sono ancora) poco chiari, ti dico quali:

    - vedo ora dalla query che il campo DATA_M era composto dal contenuto del campo DATA1 + uno spazio vuoto + il contenuto del campo Dscrizione (forse era Descrizione?). Non ho mai eseguito una tale query, non usando VB né MySql....ma penso che le istruzioni contenute nel ciclo per popolare la select list servissero, appunto, ad estrarre la data contenuta nel campo DATA_M prima dello spazio vuoto. Forse non funzionavano perchè il campo Dscrizione era vuoto?

    - se non sbaglio hai usato la funzione di VB
    formatDateTime(nome_variabile, vbShortDate)
    per visualizzare il contenuto di DATA_M nel formato MM/GG/AAAA (n.b.: di DATA_M , che a quanto vedo è il 30 dicembre 1899 (è una data di sistema oppure è contenuta nel database?) e non di DataCommand1("DATA_M") che è il contenuto del campo DATA_M per il record corrente del tuo recordset). Se ti interessa ottenere anche le date nella select list in questo formato, penso che ti basterebbe scrivere:
    formatDateTime(DataCommand1("DATA_M"), vbShortDate)
    al posto di
    DataCommand1("DATA_M")
    nel ciclo di istruzioni per popolare la lista.

    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  6. #6
    Specifica di
    “Alcuni punti mi erano (e in parte mi sono ancora) poco chiari, …”

    1) Ho dovuto modificare il campo DATA1 nella tabella hunde3 da tipo datetime a tipo date come da te suggeritomi in precedenza.
    Ho alcune procedure un po’ complesse perché i dati originali sono ancora in DB3 e vengono prima
    importati su Microsft Access per poi essere re-importati a mezzo ODBC nel database di MySql.
    (Quanti passi ha fatto la tecnologia, non dimenticandosi del passato !)
    Il mio Access è versione Access2000 (9.0.3821 SR-1) ed accetta solo il tipo datetime per cui quando si importa da lui i valori prendono il formato 0000-00-00 00:00:00 (anno-mese-giorno ore:minuti:secondi) automaticamente.
    Se poi nel database di MySql si modifica il campo e gli si dice NOT NULL(non vuoto) l’automatismo
    di MySql dovrebbe fare il resto e caricare tutti i records vuoti,
    ma dovrei controllare se carica 0000-00-00 00:00:00 o se carica 1899-12-30 00:00:00
    2) Come hai visto la variabile DATA_M contenuta nella query :
    cmdTemp.CommandText = "SELECT DATA1 + ' ' + Dscrizione AS DATA_M
    ha anche lo spazio vuoto +’ ‘+
    e Dscrizione
    (Dscrizione è giusto scritto cosí) perché è un campo della tabella nazioni
    La tabella nazioni contiene solo due campi
    Sigla_Nazione (esempio del suo contenuto I oppure D oppure USA oppure AUS altre sigle internazionali)
    Dscrizione (contiene esattamente il nome esteso della sigla della nazione e cioè Italia,Germania,USA,Australia,eccetera)
    3) il select list serve proprio per estrarre la data contenuta nel campo(variabile) DATA_M prima dello spazio vuoto.
    Il campo Dscrizione non è vuoto (come spiegato qui sopra è un campo della tabella nazione)
    4) per far apparire nella pagina WEB due date (hai centrato) ho inserito nel file asp quanto segue ed ovviamente dopo la query :
    <%varData = DATA_M
    Response.Write(formatDateTime(varData, vbShortDate))%>


    <%=DataCommand1("DATA_M")%>
    Questo il risultato rispettivamente :
    12/30/1899
    20040926
    In effetti non ho capito come mai viene visualizzata la data del 12/30/1899 pur avendo assegnato la variabile
    VarData = DATA_M e questo valore non c’è nel campo DATA1 della tabella hunde3
    Rimane il fatto che la 20040926 è un valore corretto contenuto nel campo DATA1 della tabella hunde3

    5) ho cancellato per ora, senza inserire formatDateTime(DataCommand1("DATA_M"), vbShortDate), le istruzioni iniziali e le ho sostituite con quelle da te suggerite, ma non visualizza ancora le date eppure si collega
    Vecchie istruzioni
    <select name="DATA_ESPOSIZIONE" size="1">
    <%For i=1 to DataCommand1.RecordCount%>
    <%Lun=InStr(1,DataCommand1("DATA_M")," ")
    DataMan=Left(DataCommand1("DATA_M"),Lun - 1)
    If IsDate(DataMan) Then%>
    <option value="<%=DataMan%>">
    <font color="#000000"><%=DataCommand1("DATA_M")%></font>
    </option>
    <%End If
    DataCommand1.MoveNext
    Next%>
    </select>

    Nuove istruzioni
    <select name="DATA_ESPOSIZIONE" size="1">
    <%DataCommand1.MoveFirst
    For i=1 to DataCommand1.RecordCount%>
    <option value="<%=DataCommand1("DATA_M")%>">
    <font color="#000000"><%=DataCommand1("DATA_M")%></font>
    </option>
    <%DataCommand1.MoveNext
    Next%>
    </select>

    Sinceramente ti devo ringraziare per la tua disponibiltà, come devo ringraziare i gestori di questo forum che permette ai piccoli programmatori come me di discutere serenamente delle varie problematiche.

  7. #7
    Grazie per le informazioni complete ed esaurienti.

    Tuttavia il problema rimane irrisolto...........

    :master:

    .........niente date nella lista, niente messaggi di errore.

    Rimane da verificare se lo script trova nella variabile
    DataCommand1.RecordCount
    il numero dei record contenuti nel recordset.

    Puoi verificarlo con una semplice istruzione
    response.write("I record sono "&DataCommand1.RecordCount):response.end
    prima delle istruzioni per creare la lista.

    Il valore in questione verrà stampato a video, dopo di che lo script si bloccherà.

    Nel caso la variabile non contenga il valore corretto, puoi provare a creare la lista con il ciclo

    codice:
    <select name="DATA_ESPOSIZIONE" size="1"> 
    <%DataCommand1.MoveFirst 
    do until DataCommand1.eof%> 
    <option value="<%=DataCommand1("DATA_M")%>"> 
    <font color="#000000"><%=DataCommand1("DATA_M")%></font> 
    </option> 
    <%DataCommand1.MoveNext 
    loop%> 
    </select>
    Un'ultima considerazione sulle tue date: DataCommand1("DATA_M") e DATA_M non sono la stessa cosa! Il primo è il valore contenuto nel campo DATA_M del record corrente del recordset denominato DataCommand1, il secondo è il valore contenuto in una variabile chiamata DATA_M, evidentemente esistente e non vuota, che in qualche punto del tuo script è stata creata e valorizzata.........

    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

  8. #8
    Con il cliclo da te suggerito e trasferito nel file per creare una lista
    <select name="DATA_ESPOSIZIONE" size="1">
    <%DataCommand1.MoveFirst
    do until DataCommand1.eof%>
    <option value="<%=DataCommand1("DATA_M")%>">
    <font color="#000000"><%=DataCommand1("DATA_M")%></font>
    </option>
    <%DataCommand1.MoveNext
    loop%>
    </select>
    comincio a vedere dei valori e faró ulteriroi prove.
    Dovró verificare l'esattezza dei valori esposti, poi ti sapró dire nel prossimo messaggio, perchè tra 5 minuti e per due ore non ci sarà la corrente elettrica nella mia zona causa lavori.
    Grazie

  9. #9
    Rieccomi...

    1) Dopo aver inserito come da tuo suggerimento l’istruzione
    response.write("I record sono "&DataCommand1.RecordCount):response.end
    la ricerca(script) si blocca(response.end) e viene visualizzato quanto segue:
    I record sono -1
    Cosa significa ?

    2) Ho quindi eliminato l'istruzione di cui sopra ed inserito l’altro pacchetto di istruzioni
    <select name="DATA_ESPOSIZIONE" size="1">
    <%DataCommand1.MoveFirst
    do until DataCommand1.eof%>
    <option value="<%=DataCommand1("DATA_M")%>">
    <font color="#000000"><%=DataCommand1("DATA_M")%></font>
    </option>
    <%DataCommand1.MoveNext
    loop%>
    </select>
    che come detto nel precedente mio messaggio fà vedere la lista delle date che dovró far apparire in due formati differenti a seconda della pagina WEB interrogata, se a mezzo di alcuni miei files asp in lingua italiana/tedesca/europea o in lingua americana/australiana
    Dovrei quindi sostituire alcune istruzioni con il comando o altro :
    formatDateTime(DATA_M, vbShortDate)
    ma mi sembra che DATA_M sia un composto di piú valori e non un puro campo data
    SELECT DATA1 + ' ' + Dscrizione AS DATA_M FROM
    , ecco perchè forse quando ho cercato di dare l'istruzione
    formatDateTime(DATA_M, vbShortDate)
    non mi funzionava o sbaglio ?

    3) Non si vede ancora la descrizione della nazione accanto alla data come da query dove anche qui ho scelto di disporre con DESC l’ordine delle date uguali disponendole per sigla di nazione e cioè nel caso ci fosse una data uguale con sigla I/Italia oppure D/Germania la disposizione a video avverrebbe elencando prima la data della Germania poi quella dell'Italia rispettando in questo caso l’ordine alfabetico.
    cmdTemp.CommandText = "SELECT DATA1 + ' ' + Dscrizione AS DATA_M FROM hunde3 INNER JOIN nazioni ON hunde3.NAZIONE = nazioni.Sigla_Nazione GROUP BY DATA1, nazioni.Dscrizione ORDER BY DATA1 DESC, nazioni.Dscrizione DESC"

    4) per effetto della prima modifica al tipo di record da datetime a date adesso in fase di ricerca alla pagina successiva c’è questo errore :
    Microsoft OLE DB Provider for ODBC Drivers error '80040e09'
    [TCX][MyODBC]You have an error in your SQL syntax near '(datetime, '20040926', 105) ORDER BY hunde3.QUA1 DESC' at line 1

    dovuto al richiamo delle seguenti istruzioni dove la stringa incriminata l’ho qui sotto evidenziata in grassetto ed in rosso nello script
    <%
    Tutte le istruzioni di collegamento al server poi la query ed il resto
    cmdTemp.CommandText = "SELECT hunde3.NUM, hunde3.DATA1, hunde3.LUO1, hunde3.CLASSE, hunde3.QUA1, hunde3.VEDZBBEL, hunde3.GIU1, hunde0.Pedigree AS NUM, hunde0.Brevet, hunde0.Sesso, hunde0.Name, Nazioni_Cani.descrizione FROM ((hunde3 LEFT OUTER JOIN hunde0 ON hunde3.NUM = hunde0.Pedigree ) INNER JOIN Nazioni_Cani ON hunde3.NAZIONE = Nazioni_Cani.NAZIONE)"
    WhereFlag=False
    If Sesso <> "" Then
    cmdTemp.CommandText = cmdTemp.CommandText & " WHERE hunde0.Sesso = '" & Sesso & "'"
    WhereFlag=True
    End If
    If Classe <> "" Then
    If WhereFlag Then
    cmdTemp.CommandText = cmdTemp.CommandText & " AND hunde3.CLASSE = '" & Classe & "'"
    Else
    cmdTemp.CommandText = cmdTemp.CommandText & " WHERE hunde3.CLASSE = '" & Classe & "'"
    WhereFlag=True
    End If
    End If
    If Data <> "" Then
    If WhereFlag Then
    cmdTemp.CommandText = cmdTemp.CommandText & " AND hunde3.DATA1 = Convert(datetime, '" & Data & "', 105)"
    Else
    cmdTemp.CommandText = cmdTemp.CommandText & " WHERE hunde3.DATA1 = Convert(datetime, '" & Data & "', 105)"
    "
    WhereFlag=True
    End If
    End If
    If Not WhereFlag Then
    Response.Redirect "democampbelfreeplus.asp"
    End If
    cmdTemp.CommandText = cmdTemp.CommandText & " ORDER BY hunde3.QUA1 DESC"
    cmdTemp.CommandType = 1
    Set cmdTemp.ActiveConnection = DcLol
    DataCommand1.Open cmdTemp, , 0, 1
    If DataCommand1.eof Then
    Response.Redirect "NoDatademofreeplus.asp?ID=" & Server.URLEncode(Num) & "&Data=" & Server.URLEncode(data) & "&Sesso=" & Sesso & "&Classe=" & DogClass
    End If
    If DataCommand1.RecordCount > From Then
    DataCommand1.Move Clng(From)
    End If
    %>

    Ho provato a modificare Convert(datetime, '" & Data & "', 105) in Convert(date, '" & Data & "', 105)
    ma l’errore non cambia e dice :

    Microsoft OLE DB Provider for ODBC Drivers error '80040e09'
    [TCX][MyODBC]You have an error in your SQL syntax near '(date, '20040926', 105) ORDER BY hunde3.QUA1 DESC' at line 1


    Risolto quest’ultima problematica tutte le altre procedure delle ASP dovrebbero funzionare o quanto meno dovrei riuscire a farle funzionare tutte ed il passaggio da SQL a MySQL dovrebbe in teoria portarmi dei vantaggi sull’uso di tutto lo spazio disco non piú limitato da SQL, ma utilizzato in toto dal database di MySQL, che ha anche il vantaggio di diminuire lo spazio usato perché elimina tutti gli spazi vuoti in tutti i records delle tabelle nei relativi campi.

    Mi auguro che questo sia l’ultimo aiuto che chiedo e che le mie difficoltà siano di buona lettura per altri che potrebbero aver avuto le mie medesime problematiche.

  10. #10
    Spero di avere tempo, al più presto, di leggere e capire l'intero post....nel frattempo, però, mi viene questo suggerimento: stabilito che l'errore, o meglio il mancato caricamento dei valori nella lista, dipendeva dal fatto che RecordCount non conteneva il numero dei records, rimodifica il campo DATA_M e riprova lo script nella sua versione originale, quella postata all'inizio, tranne le istruzioni:
    codice:
    <%For i=1 to DataCommand1.RecordCount%>
    ........
    <%next%>
    sostituite da
    codice:
    <%DataCommand1.MoveFirst 
    do until DataCommand1.eof%>
    ........
    <%DataCommand1.MoveNext 
    loop%>
    Male che vada perdi qualche minuto ma avrai ulteriori utili indicazioni di errore.......
    E' nato www.lombardiamotori.it

    www.universocase.it: il primo portale italiano di annunci immobiliari gratuiti e autogestiti!

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.