petite demande de reneignement au sujet ds BDD

Un problème avec votre base de données MySQL, PostgreSQL ou autres.

Modérateurs : jturlier, Météo Villarzel

Répondre
alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

petite demande de reneignement au sujet ds BDD

Message par alain » 17 déc. 2014, 21:48

Bonjour
suivez mon regard j'ai vue que Jean a de très bonne connaissance en base de données.
je penses a ses programmes de transmissions qu'il a ecrit
Météo Villarzel et beaucoup d'autres se débrouillent plutôt bien ainsi qu'en PHP.
De mon coté PHP et Mysql je suis un ignare total.... Mais je lit les cours du Zéro.
une fois cette pommade passé, je me tourne vers vous et surtout vers Jean ( j'aurais bien fait un MP, mais peut être ma question va intéresser une personne).
-Je suis en train de me créer une petite routine afin d’envoyer des données Téléinformation et température vers une base Mysq.
- Pour mes essais j'ai pris DB4free, qui accepte les connections externes.
seulement je ne sait pas trop comment remonter ces informations.
Le net regorge de tuto et en piochant a gauche et a droite j'ai fait quelques lignes de codes de test.
bon ça marche depuis une semaine avec des routines de tests ecritent de façon très basique, mais je ne sait pas comment je pourrait récupérer les erreurs de connections ou rupture de transmission internet simplement?
Mes connaissances en Basic datent des années 80, et mon cerveau ne cesse de se ramollir depuis!

pour l'instant voila comment je fait:
-En local j'ai un programme qui collecte convenablement mes données.
-J'affectent ces données a des variables et je transmet en connexion externe vers DB4free.
- j'ai fait une simple routine d’erreur qui intercepte l'erreur si je n'ai pas de connexion.
- si j'ai un soucis de connections, alors je dirige mes données vers un fichier.
- quand je retrouve ma connexion je revoie mes données et entre deux j'envoie mon fichier ( celui qui a été créer pendant a perte de connections).
seulement c'est très lourd et tres consommateur de temps machine je pense que je suis informé de la perte de connexion par un tim out soit du plugin ODBC soit..... J'en sait rien :mrgreen:
Question il y a t'il une requête que l'on peut envoyer afin de tester sa connexion qui me renverrais un MSG : conexion OK/nonOK ?
voila si vous connaissez l'astuce, merci

explication, attention c'est du code de test, voila comment je fait

1)- j'ai une fonction qui me convertie l'instant mon heure PC en heure Unix

Code : Tout sélectionner

Function UDate(oldDate)
    UDate = DateDiff("s", "01/01/1970 00:00:00", oldDate)
    End Function
2) je me connecte a ma base (DB4REE)

Code : Tout sélectionner

'Ouvrir une connexion sur le serveur MySQL
  Conn.Open "DRIVER={MySQL ODBC 5.1 Driver};SERVER=" & SERVEUR & ";DATABASE=" & DATABASE & ";UID=" & USER & ";PWD=" & PASSWORD & ";OPTION=3"
  'Ouvrir un recordset sur la table 'tbteleinfo'
  Rs.CursorLocation = adUseServer
  Rs.Open "SELECT * FROM tbteleinfo", Conn, adOpenDynamic, adLockOptimistic
dans ma variable je met le timestamp

Code : Tout sélectionner

intCurrent_Unix_Time = UDate(Now())
au début je travaillait avec date_time, mais ça a l'air plus facile en timestamp

ensuite j’insère mes donnée et je ferme la connexion
date_heure est prise au moment de l'envoie
pour le reste c'est pris dans mes variables que me fournit mon bout de code

Code : Tout sélectionner

 Rs.AddNew
      Rs("tpUnix") = intCurrent_Unix_Time
      Rs("date_heure") = Now
      Rs("La_Date") = Date
      Rs("MOTDETAT") = Text_MOTDETAT
      Rs("ADCO") = Text_ADCO
      Rs("OPTARIF") = Text_OPTARIF
      Rs("ISOUSC") = Text_ISOUSC
      Rs("HCHC") = Text_HC
      Rs("HCHP") = Text_HP
      Rs("PTEC") = "HC" 'Text_PTEC
      Rs("IINST") = Tex_IINST
      Rs("IMAX") = Text_IMAX
      Rs("PAPP") = Text_PAPP
      Rs("WATT") = Text_kwh
      Rs.Update
      Rs.Requery
     Rs.Close
    Conn.Close
en ce qui concerne la gestion d'erreur de connexion a la base de donnée ou perte d'internet j'ai une simple routine d'erreur qui me renvoie un code d'erreur.
et comme je disait tout a l'heure si j'ai une erreur je sauvegarde mes données en local tant que ce code d'erreur est present
ensuite je repart comme ci rien n’était.
bref mon soucis c'est quand je fait un appel connexion, si elle n'arrive pas il se passe au moins trente secondes avant la réception du code d'erreur. ça me bloque mon programme ( même pour le reste la machine reste libre grâce a une instruction DoEvents)
c'est la que je pèche!

message d'erreur qui me permet de décider de démarrer ma procédure de stockage en local (tableau dynamique)

Code : Tout sélectionner

erreur Dans le Timer Exporte_vers_Mysql  le/a : 17/12/2014 19:32:18 -2147467259 [MySQL][ODBC 5.1 Driver]Unknown MySQL server host 'db4free.net' (2)
pensez vous que je doit continuer de tester dans cette voie?
pensez vous qu'il vaut mieux envoyer un fichier texte (contenant mes donnée) sur le serveur, après je m'en sert pour r remplir ma base
pensez vous qu'il soit préférable d’envoyer mes données a l'aide d'une URL. a la réception ISSET et GET pour remplir ma base
merci de vos avis
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: petite demande de reneignement au sujet ds BDD

Message par jturlier » 19 déc. 2014, 20:20

alain a écrit :Question il y a t'il une requête que l'on peut envoyer afin de tester sa connexion qui me renverrais un MSG : conexion OK/nonOK ?

Code : Tout sélectionner

 
Imports System.Data.Odbc
Imports System.Data.SqlClient
Imports System.Threading


Public Class db
    Public Shared db As New OdbcConnection
    Public Shared cmd As OdbcCommand
    Public Shared Reader As OdbcDataReader

Public shared function connexion_DB as boolean
  Dim ex As Exception = Nothing
        'Connexion_DB = False
        'DéConnexion_DB()
        Try
            If db.State = 1 Then
                Return True
            End If
        Catch ex
        End Try
        db = New OdbcConnection
        If I_type_acces Then
            db.ConnectionString = "DSN=" & I_DSN & ";UID=" & I_user & ";PWD=" & I_pw & ";"
        Else
            'If I_pw <> "" Then
            'db.providerName = "MySql.Data.MySqlClient"
            If I_drv.Substring(0, 2) = "My" Then
                If I_pw = "" Then
                    db.ConnectionString = "Driver={" & I_drv & "}; Server=" & I_host & ";Port=" & I_port & ";Database=" & I_db & ";Uid=" & I_user & ";option=3;"
                Else
                    db.ConnectionString = "Driver={" & I_drv & "}; Server=" & I_host & ";Port=" & I_port & ";Database=" & I_db & ";Uid=" & I_user & ";PWD=" & I_pw & ";option=3;"
                End If
            Else
                db.ConnectionString = "DRIVER={" & I_drv & "};SERVER=" & I_host & ";Port=" & I_port & ";DATABASE=" & I_db & ";UID=" & I_user & ";PWD=" & I_pw & ";option=3;"
            End If
        End If
        Try
            db.Open()
            If I_drv.Substring(0, 2) = "Po" Then
                Dim qry1 As String = "SET client_encoding TO 'UTF8';"
                cmd = New OdbcCommand(qry1, db)
                cmd.ExecuteNonQuery()
            End If
            hasrun = True
            Return True
        Catch ex
Je ne te mets qu'une partie de la connexion à la DB mais si la connexion est déjà établie, on sort immédiatement sinon on poursuit la connexion avec les différents tests pour s’assurer qu'elle est correctement établis.
tu la testes comme ça :
if not connexion_db then return false (dans une fonction, sinon c'est un peu moins facile dans une sub)

Quand tu crées une fonction, tu dois dire ce qu'elle reçoit et te retourne si tu ne veux pas de surprise, le mieux c'est de coder avec strict = on

Code : Tout sélectionner

function Udate(oldDate as datetime) as long
return = (oldDate.toUniversalTime - New DateTime(1970, 1, 1, 0, 0, 0).ToUniversalTime).TotalSeconds      'le timestamp est en UTC pas en timeZone
end function
Quand tu fais une boucle d’attente, si tu ne veux pas qu'elle consomme trop de ressources, il faut d'une part limiter ce qu'elle fait (en général on attend uniquement le passage à un état true ou false d'une variable booléenne, et surtout on introduit Application.DoEvents plutôt qu'un Doevent créé à partir d' API.

On ne passe pas les variables à php puisqu'on doit être en connexion directe avec la base de données distante (soit à partir de son IP soit à partir de son URL.

Si on n'est pas en accès direct, il est plus intelligent de remonter par FTP un fichier .sql avec le contenu des données à introduire directement dans le serveur SQL distant et de le traiter avec un Php ou .asp qui va tester périodiquement s'il y a ce fichier qui existe.

Si on veut éviter les coupures par timeout, il est recommandé, après chaque opération sur les tables, de faire une déconnexion. Les hébergeurs n'aiment pas beaucoup les connexions distantes permanentes.

Autre conseil, éviter de travailler avec des fonctions ADO qui ne sont pas pratiques et datent de plus de 15 ans. ODBC est plus récent et surtout moins compliqué à traiter.

Passe aux fonctions des frameworks avec VB 2012 (W8.1, 8, 7) ou vb 1010 (pour XP), plutôt que de travailler avec les composants COM de VB6 qui datent de 98.

En un mot, entre dans le XXIème siècle :lol: :lol:


Toutes ces remarques sont dans le désordre et ressemblent à un inventaire à la Prévert... désolé !
Je t'ai passé tout le code en VB, parce que j'ai vu que c'est ce que tu utilises, mais ça n'est pas compliqué de l'écrire en C#.

Jean

PS, A partir de la semaine prochaine il va falloir que je recrée complètement mon site, peut-être en ASP plutôt qu'en PHP, je ne sais pas encore. J'introduirai aussi sans doute pas mal de synthèse vocale comme c'était déjà un peu le cas sur MeteOzoir . Le Père Noël m'apporte une WMR200, et il va falloir que j'essaie aussi de récupérer directement les données du port USB (pas UBS ... Pierre-André a tremblé ) plutôt que d'utiliser Xnet, mais dans l'immédiat je passerai par l'excellent logiciel de JoB
Comme je l'ai déjà laissé entendre, je réécrirai aussi complètement la récupération des données qui servent aux comparaisons des NOAA directement dans les tables minimaxi et détail plutôt que dans les fichiers NOAA et statistiques de GW.
Je vais sans doute pomper sur Pierre-André pour la partie Highstock que je n'ai jamais pratiqué, sur ce coup il est en avance sur moi !!! (Je lui ferai cadeau d'un versement sur mon compte à UBS... par contre si d'autres helvètes veulent participer, Pierre-André leur fournira mon N° de compte... hé oui en Helvétie les comptes sont numérotés)
Donc comme vous pouvez vous en douter, je vais être très peu disponible pendant un certain nombre de semaines.

Bonne soirée à tous
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

alain
Messages : 101
Enregistré le : 21 nov. 2014, 20:23

Re: petite demande de reneignement au sujet ds BDD

Message par alain » 20 déc. 2014, 11:01

Bonjour
ta réponse, je l'avais pas vue MAIS
il y a tout ce que je voulais
Alors pour ta retraite je ne peut rien faire, mais la sur le coup, MERCI c'est pas assez!
Si on n'est pas en accès direct, il est plus intelligent de remonter par FTP un fichier .sql avec le contenu des données à introduire directement dans le serveur SQL distant et de le traiter avec un Php ou .asp qui va tester périodiquement s'il y a ce fichier qui existe.
mais quel C..N j'avais pas du tout pensé a ça, pourtant ça et c'est tellement plus simple et plus universel.

demain je refait mon code dans ce sens.
en ce qui concerne Visual basic6 je te trouve tres dur avec moi! ;) oui car j'ai commencé en basic avec un comodore 64, puis un Amstrad. 64K de mémoire dans les année 80 :o
C’était le temps des PEEK et POKE et des KM de lignes de data Il faut se rappeler qu'en ce temps là l'ordinateur n'avais pas de carte graphique ni de mémoire écran, c'était une partie de la RAM qui servait de mémoire écran ( écran vert ou ambre) moi j'avais une sortie sur la telé et QUATRE couleurs, oui je dit QUATRE et de mémoire le texte sur 40 colonnes.. bref le summum de la technologie.
biens sur le lecteur de disquette, 360K était hors de portée de notre bourse, alors j'enregistrais mes programmes sur un magnétophone a l'aide d'une bidouille innommable. le temps de sauvegarde d'un programme pouvait me prendre la journée.
le temps du Locomotive basic sur amstrad
puis est arrivé le Turbo Basic

je te passe mon passsage sur Atari
pour arriver sur les premiers compatible PC
le de mémoire
basic pour dos: basica
puis gw basic
Quik basic

pour les bases de donnée, c’était a la main en sequenciel
et si trop grosse tu avait, toujours a la main ligne par ligne la possibilité de créer ta bases a aces direct
ensuite un grand progres VB1, VB3, VB6
et je suis resté a VB6
Quand est arrivé VBNET je me suis trouvé perdu, j'ai continué en VB6 que je maitrisait suffisamment
l'interface, la façon de programmer j'arrivais pas... puis un peu de fainéantise ;)
j'ai essayé le Pascal mais la syntaxe ne me plaisait pas, j'ai essayé Delphi pareil cette syntaxe me plaisait pas
pourtant j'utilise encore des prog écrit en Delphi vieux d 20 ans!!
Je ne sais pas si a mon age je vais changer, je vais faire un effort et installer la version gratuite de VBNET,
Mais Franchement on était pas plus heureux dans nos années 68 que maintenant?
et je te dit pas ce que je pense de ma liberté d'aujourd'hui ou je doit regarder autour de moi avant de parler sous peine de me faire poursuivre par des associations ( dont je ne dirais pas le nom ici),mais bon je les finances alors j'en parle quand même.
-je suis quand même pas sur de vouloir rentrer dans le 20em siècle
- société multiculturelle (il parait que c'est une chance!)
-télé réalité a vomir
aller j'ouvre une fenêtre pour VB NET, mais retourne hiberner dans mes merveilleuses années 60 ou mes voisins s'appelait Dupont, Durand
tiens j'ai une solution pour ta retraite, comme ça on restera pas trop fâché, un p'tit job tu peut bosser jusqu’à la fin de tes jours a ton rythme, des fois 6 minutes par jours si si!
aller, on se réconcilie malgré que tu as occulter ma lente progression ? je reste dans mon 19emm siècle et j'introduit une dose de 20emm :lol:
https://www.youtube.com/watch?v=YpyybLSSTCk
station Orégon WMR 200
logiciel Xnet version 2012-03-17a et Graphweather V 3.0.15
windows XP SP3 sur vieux portable destiné a la météo
Windows7 sur mon portable, permet de tester les applications qui ne veulent plus de XP
http://mapetitemeteo.esy.es/

Avatar du membre
jturlier
Administrateur du site
Messages : 393
Enregistré le : 10 déc. 2014, 10:20
Localisation : Sérignan 34410
Contact :

Re: petite demande de reneignement au sujet ds BDD

Message par jturlier » 20 déc. 2014, 11:30

Salut Alain,
comme dirait un certain livre, "la nostalgie n'est plus ce qu'elle était" !
J'ai comme toi connu l'Atari, le ZX80, la calculette commodore avec 80 pas de programme et les produits Borland, mais à cette époque, je baignais déjà dans les ordinateurs (4 kO de mémoire à ferrites) (j'ai commencé là-dedans en 62) et autres matériels mécanographiques : 40 ans de carrière chez IBM en passant pratiquement par tous les métiers techniques (SAV, Labo, Liaison usine SAV, quelques séjours à l'étranger... et plein d'autres choses - 12 déménagements liés au boulot) enfin quoi une carrière bien remplie avec seulement un an et demi de purgatoire à l'éducation des jeunes embauchés !
Par contre en micro informatique, je suis autodidacte, bien que ma culture "gros systèmes" m’ait beaucoup aidé et que sans être programmeur, j'ai manipulé une bonne vingtaine de langages différents au moins .
Bon on ne va pas refaire le coup des anciens combattants !
Tu vas voir, c'est un plaisir de programmer avec les fonctions des frameworks, VB6 n'était pas vraiment fait pour jouer avec les bases de données !

Jean
Jean

Station :
VP2pro + anémomètre ultrasons et console Vue
Cumulus 1.9.4 + Cumulus2SQL + MySQL

Audio :
FR
PC :
W10 64bits migré
http://meteoserignan.ddns.net
Image

Répondre