Le calcul entre base de donne et listbox

Fermé
farid174 Messages postés 39 Date d'inscription lundi 26 septembre 2016 Statut Membre Dernière intervention 12 février 2019 - 4 nov. 2016 à 00:20
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 - 5 nov. 2016 à 23:08
Bonjour,
j ai un base de donnée qui contient un liste de 250 000 coordonnées points (code,x,y,z) et je recherche la manière qui me permette de calculer (∆X,∆Y ,∆Z ) entre cette base donne et un listebox limite par 1000 points

le calcul se fait entre les points qui sont occupent le meme code dans les deux côté ( base de donne et listbox)


7 réponses

Utilisateur anonyme
4 nov. 2016 à 07:32
Bonjour,
quel VB?
  • VBS
  • VBA
    • Word
    • Excel
    • Access
    • Powerpoint
    • Autre
  • VB6
  • VB.Net
    • Winform
    • WPF


Et quelle base de données ?
  • sql server
  • mysql
  • access
  • etc

0
farid174 Messages postés 39 Date d'inscription lundi 26 septembre 2016 Statut Membre Dernière intervention 12 février 2019 1
Modifié par farid174 le 4/11/2016 à 13:43
salut Je veux dire sur vb.net Winform et le base de données sur access
0
Utilisateur anonyme
4 nov. 2016 à 13:56
Ok et tu bloques à quelle étape?
Qu'as-tu essayé?
Peux t il y a avoir plusieurs éléments dans la base de données qui ont un le même code?
Même question pour ta listbox (entre nous sois dit, un contrôle n'a pas vocation à être une source de donnée, mais un moyen d'afficher cette source de données)
0
farid174 Messages postés 39 Date d'inscription lundi 26 septembre 2016 Statut Membre Dernière intervention 12 février 2019 1
Modifié par farid174 le 4/11/2016 à 23:40
je expliquer mon problème avec un autre façon j'ai un deux fichiers des coordonnes avec cette format (code point,x,y,z) ces fichiers sont de type text (.txt)

le fichier principal est une large fichier contient 250 000 linge (coordonnées) et le fichier secondaire contient 1000 linge le problème qui se pose que je recherche a la méthode qui me donne la résulta de calcul de (∆X,∆Y ,∆Z ) entre les deux fichiers

Remarque :

----- le calcule se fiat avec les point de même code sur les deux fichiers
----- tous les points de fichier secondaire un Certainement exister dans le fichier principal avec peu de changement sur les coordonnées qui je suis dans le processus de compte
---- le langage de programmation que je utilise vb.net 2010 windform
----- je pas démarre dans la tache de programmation parce que j'ai besoin le Príncipe de démarrage.
0
Ca ne répond pas à
Peux t il y a avoir plusieurs éléments dans la base de données qui ont le même code?
Même question pour ta listbox?

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
farid174 Messages postés 39 Date d'inscription lundi 26 septembre 2016 Statut Membre Dernière intervention 12 février 2019 1
5 nov. 2016 à 20:14
dans le base de donnée le code si unique pour chaque element sans répétition
mais dans listbox La répétition de code peut être existe
0
Utilisateur anonyme
5 nov. 2016 à 21:34
ok

dans un premier temps, il te faut écrire une classe qui possède aux moins les propriétés dont tu parles ici (Code, X, Y et Z), on va l'appeler Coordonnees car Point existe déjà dans la framework.

Ensuite il te faut remplir deux collections (la plus simple à utiliser est la List(of )) avec tes deux bases de données.
Dans un message tu parles de fichiers texte, dans l'autre tu reviens à la base de données...
Quand tu seras décidé, il y a des exemples sur le net pour les bases de données, dont ici
https://codes-sources.commentcamarche.net/source/s/visual-basic-vb-net-1/base-de-donn/last

Si tu as des fichiers texte "en ligne", tu peux utiliser la classe File.ReadAllLine, qui retourne un tableau de string dont chaque item est une ligne du fichier.
Ensuite tu parcours ce tableau pour remplir ta liste avec les données. S'il s'agit de données avec séparateur (csv, fichier tabulé, ect.), il faut utiliser la méthode Split de la classe string. S'il s'agit de fichier ou les données ont une largeur fixe, alors il faut utiliser SubString.

Si tu as des fichiers xml, je propose une méthode ici
https://codes-sources.commentcamarche.net/faq/11196-linq-to-xml-c-et-vb-net

Si tu as des fichiers json, il existe des exemples sur le net, dont ici
https://codes-sources.commentcamarche.net/source/s/visual-basic-vb-net-1/json/last

Ensuite tu vas faire une requête Linq Intersect, qui va retourner depuis ta grande liste, ceux qui ont le même code que dans la petite liste. Intersect ne retourne pas de doublon, donc il était important de savoir si des doublons existent dans la base de données.

Enfin une seconde requête Linq va parcourir tes autres données, chercher celles qui correspondent dans le résultat de la précédente et générer une instance de Coordonnees avec la différence

Les deux dernières étapes sont un peu compliquées, voici l'implémentation
			Dim baseDeDonnees As New List(Of Coordonnees)() From {New Coordonnees("code1", 1.2, 1.2, 1.2), New Coordonnees("code2", 2, 3, 4), New Coordonnees("code3", 5.5, 22, -1), New Coordonnees("code4", 10, 11, 9), New Coordonnees("code5", 3, 5, 8), New Coordonnees("code6", 0, 100, -50), New Coordonnees("code7", 123, 456, 789), New Coordonnees("code8", 22, 22, 22), New Coordonnees("code9", 987, 654, 321), New Coordonnees("code10", 135, 246, 802)}

			Dim aSoustraire As New List(Of Coordonnees)() From {New Coordonnees("code1", 1.3, 1.3, 1.3), New Coordonnees("code3", 5, 21, -2), New Coordonnees("code1", 1.5, 1.7, 1.9), New Coordonnees("code6", 10, 87, -47), New Coordonnees("code9", 987, 654, 321), New Coordonnees("code10", 134.5, 245.6, 805.2), New Coordonnees("code11", 0, 0, 0)}


			Dim intersection As IEnumerable(Of Coordonnees) = baseDeDonnees.Intersect(aSoustraire, New CoordonneesComparer())
			Dim resultat As List(Of Coordonnees) = (
			    From c In aSoustraire'itere la liste soustraire et place l'instance en cours dans c
			    Where intersection.Any(Function(x) x.Code = c.Code)'s'il existe dans interception un enregistrement avec le même que c
			    Let c2 = intersection.Single(Function(x) x.Code = c.Code)'on place cet enregistrement dans c2
			    Select New Coordonnees(c.Code, c.X - c2.X, c.Y - c2.Y, c.Z - c2.Z)).ToList() 'et on crée une coordonnée avec la différence


Attention enlève les commentaires dans la requête, sinon ça ne compile pas.

Tu remarques que pour l'intersection, il faut une classe CoordonneesComparer, ça sert à définir comment on comparer deux Coordonnees
Class CoordonneesComparer
		Implements IEqualityComparer(Of Coordonnees)
		Public Overloads Function Equals(ByVal Un As Coordonnees, ByVal Autre As Coordonnees) As Boolean
			Return Un.Code = Autre.Code
		End Function

		Public Overloads Function GetHashCode(ByVal obj As Coordonnees) As Integer
			Return MyBase.GetHashCode()
		End Function
	End Class

-1
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 Ambassadeur 1 550
5 nov. 2016 à 22:40
si tu importes tes deux fichiers dans deux tables de ta base de données, cela va donner
une table T1 et une table T2,
chaque table contient des éléments (code,x,y,z)

si tu veux calculer les (∆X,∆Y ,∆Z ) ,

je suggère :

select T1.code, T1.x-T2.x as DX, T1.y-T2.y as DY, T1.z-T2.z as DZ
from T1, T2
where T1.code = T2.code

Cela va bien marcher si le "code" est unique dans chaque fichier.
-1
Utilisateur anonyme
5 nov. 2016 à 23:02
Il a dit que que n'est pas unique dans la "listbox"
0
yg_be Messages postés 23342 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 21 novembre 2024 1 550
5 nov. 2016 à 23:08
pas grave si unique que dans un des deux fichiers.
résultat plus surprenant si unique dans aucun ficher, mais comment éviter cela?
0