Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it L'avatar di den87
    Registrato dal
    Mar 2011
    Messaggi
    28

    vb6 - mandare messaggio a tutti utenti di una tabella usando un db

    salve a tutti.
    dovrei realizzare una procedura che in automatico invia dei messaggi agli utenti registrati in una tabella.

    gli utenti posson essere n.. quindi qualsiasi numero possibile.
    riesco ad inviare un messaggio singolo, da utente "a" ad utente "b" (che ovviamente sono registrati).

    se però volessi inviare il messaggio verso tutti (come fa ad esempio il programmino winsent, che invia messaggi agli utenti dei singoli pc collegati in rete lan, o a tutti in un colpo solo) non saprei proprio come fare.

    ricapitolando, io utilizzo la procedura che segue per inviare da "a" a "b" ; creo praticamente una nuova stringa nella tabella "messaggi". prima di questa procedura però, il sistema cerca nella tabella "utenti", se gli utenti segnati nei textbox1 e textbox2 esistono realmente.

    rs.Open "messaggi", db, 3, 3

    rs.AddNew
    rs("mittente") = Text1.Text
    rs("destinatario") = Text2.Text
    rs("messaggio") = text3.tex
    rs.Update


    come potrei fare per mandare in automatico il messaggio a tutti gli utenti, dall utente "a" escludendo "a" come destinatario del suo stesso messaggio??


    grazie!!!

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Mi sembra semplice: fai un ciclo sui record degli utenti memorizzati nella tabella e, per ciascuno di essi, inserisci un nuovo record nella tabella dei messaggi.

    Non vorrei aver capito male...
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di den87
    Registrato dal
    Mar 2011
    Messaggi
    28
    ero sicuro ci volesse un ciclo... il problema è che a livello di codice non saprei come farlo... aiuto...

  4. #4
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,480
    Originariamente inviato da den87
    ero sicuro ci volesse un ciclo... il problema è che a livello di codice non saprei come farlo... aiuto...
    C'è poco da aiutare: dovresti già aver scritto codice per fare inserimenti, o per leggere dati.

    Leggi la documentazione delle classi che hai utilizzato per queste operazioni e verifica le proprietà e i metodi a disposizione per vedere qual è il loro scopo e scrivi il codice necessario.

    Poi, in caso di problemi o errori specifici, intervieni qui pubblicando il codice sorgente, giusto o sbagliato che sia, e vedremo di suggerire migliorie o correzioni.

    Se ti aspetti che - non conoscendo nemmeno la struttura del DB, peraltro - noi si scriva il codice al posto tuo, questo non è tra le finalità del forum.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  5. #5
    Utente di HTML.it L'avatar di den87
    Registrato dal
    Mar 2011
    Messaggi
    28
    devo utilizzare un ciclo do while??

    io pensavo di fare una cosa del genere (la butto giu velocmente)

    select utenti from tabella;

    do until eof

    rs.Open "messaggi", db, 3, 3

    rs.AddNew
    rs("mittente") = Text1.Text
    rs("destinatario") = rs("utente")
    rs("messaggio") = text3.tex
    rs.Update

    next

  6. #6
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Leggi il Regolamento, please!
    Il codice va formattato ed identato usando il tag CODE.

    Veniamo al problema:
    Prima di tutto NON esiste un ciclo come l'hai scritto tu
    codice:
    do until eof
    next
    Quindi è palese che ti manchino le basi sul linguaggio, per cui ti consiglio caldamente di studiarti BENE la guida sull'argomento.

    Se vuoi selezionare un 'range' di utenti puoi costruirti una query 'ad hoc' sulla base delle lettere iniziali che itendi usare, nel tuo caso (supponiamo che gli utenti siano in una tabella di nome UTENTI):

    codice:
    Dim rsUtenti As ADODB.Recordset
    Dim sSQL As String
    sSQL = " SELECT utente FROM utenti "
    sSQL = sSQL & " WHERE LEFT(utente,1) IN ('a', 'b') "
    sSQL = sSQL & " ORDER BY utente "
    
    rsUtenti.Open sSQL, db, adOpenForwardOnly, adLockReadOnly
    Ora hai un recordset con l'elenco degli utenti desiderati.

    Non ti resta che eseguire il tuo ciclo scorrendo il recordset, inviando direttamente il messaggio, per cui non serve nemmeno popolare un secondo recordset 'messaggio', a meno che tu non voglia tenere traccia dei messaggi inviati.
    Se è così allora sarebbe ancor più pratico fare un insert diretta (INSERT INTO) direttamente nella tabella 'messaggi'.

    Facci sapere.




  7. #7
    Utente di HTML.it L'avatar di den87
    Registrato dal
    Mar 2011
    Messaggi
    28
    chiedo scusa per non aver rispettato il regolamento...
    comunque
    questo sarebbe quello che vorrei fare io


    codice:
    rs.Open "select utente from utenti order by utente", db, adOpenForwardOnly, adLockReadOnly
    Do Until rs.EOF
    
    rs.Open "messaggi"
    
        rs.AddNew
        
        rs("mittente") = Text1.Text
        rs("destinatario") = ' qui in pratica per ogni volta che cicla mi dovrebbe inserire un utente differente.
        rs("messaggio") = Text3.Text
        rs.Update
        
      rs.MoveNext
        Loop
    
     db.Close

  8. #8
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Vedo che le tue conoscenze sono alquanto scarse.
    Forse ti conviene prima studiarti un po' meglio l'uso dei recordset di ADO.

  9. #9
    Utente di HTML.it L'avatar di den87
    Registrato dal
    Mar 2011
    Messaggi
    28
    cosa che sicuramente farò!!!
    di vb6 ho nozioni frammentate un po di tutto.
    ecco perchè riesco a far solamente alcune cose ed altre no.
    puoi darmi una dritta per come fare questa procedura almeno?
    stavo pensando di utilizzare un array e caricare li la lista degli utenti. cosi quando faccio il ciclo poi riesco a richiamarli... se no nonsaprei proprio come muovermi...
    grazie...

  10. #10
    Utente di HTML.it L'avatar di gibra
    Registrato dal
    Apr 2008
    residenza
    Italy
    Messaggi
    4,244
    Un array non serve a nulla, il mio codice ti crea già un recordset che elenca i dati necessari, quindi basta utilizzare quello.

    Perdonami, senza polemica, la tua domanda fa capire che non hai la minima idea di cosa stai scrivendo.
    Sembra che tu vada "ad intuito", ma non è questo il modo di programmare.

    Abbi pazienza, sai che ti ho già aiutato in altre cose, ma in questo caso non si possono 'dare dritte' (come tu chiedi) a questo livello di conoscenza.
    In realtà, le dritte te le ho già fornite (vedi codice), ma per tutta risposta continui a scrivere codice di un assurdità assoluta, che nessun sviluppatore che avesse un minimo di conoscenza di ADO scriverebbe:

    rs.Open "select utente from utenti order by utente", db, adOpenForwardOnly, adLockReadOnly
    Do Until rs.EOF

    rs.Open "messaggi"
    Ecco perchè PRIMA devi studiarti ADO.
    Poi, dopo, possiamo discutere sul come implementare al meglio una routine.

    Andare oltre significherebbe scriverti il codice pari-pari al posto tuo, cosa che non è nella natura di un forum tecnico.


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 © 2026 vBulletin Solutions, Inc. All rights reserved.