Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

211 commentaire(s) de asimengo sur des sources sur tout CodeS-SourceS

Le : 30/10/2008 11:01:50
Source : TEXTBOX AUTOCOMPLETE - ZONE DE TEXTE PRÉREMPLISSABLE LORS DE LA SAISIE UTILISATEUR [MODULE DE CLASSE]
Super, j'apprécie la simplicité en passant par une classe, elle permet de résoudre simplement le problème sans ce soucier de la mise en forme du TextBox, évènements et autres.

J'ai un contrôle presque dans le même ordre d'idée avec passage de CommandText et ConnectionString en paramètre (Dans ton cas ce serait un tableau bidimentionnelle). La différence est que sur l'évènement Validation du TextBox, il écrit la description en dessous du textbox. Dans ton cas ta Classe recevrait en paramètre 2 objets, le TextBox et le Label pour la description. Exemple : si le tableau a 3 colonnes et définit(n,1 to 3), dans le TextBox, il mettra l'indice 1 du texte trouvé et dans la description les indices 2 et 3. Tu pourrais rajouter un paramètre pour savoir si la colonne 0 du tableau contient les noms de colonnes afin de rendre plus explicite la description.

Parfait ta source, mais pour quelques lignes de codes en plus, tu as quelque de meilleur.

@Us_30:Ma dernière source sur la décomposition SQL permettrait en effet de pouvoir gérer des listes infinies en affichant un form pour filtrage de la liste.


Le : 28/10/2008 15:26:48
Source : CRYPTAGE ET DÉCRYPTAGE DE CHAÎNES ET DE FICHIERS [MODULE DE CLASSE]
@PCPT : Merci une fois de plus de la peine que tu t'es donné pour ma demande.

En définitive je pense que ta méthode "(dé)cryptage de tableau de byte" me suffirait largement, après le reste je manage suivant mes besoins.

En effet, il me suffit de passer à ta méthode "tableau" légèrement modifiée, le RS.getrow. En effet il me faudra les enregs en ligne et les champs en colonne. Pour avoir la structure des champs, il faudra passer aux 4 premières lignes respectivement les proprités champs Name, Type, DefinedSize, Attributes. J'aime bien toujours que mes composants soient autonomes.

Au décrytage, une lecture séquentielle permet de reconstituer aisément le RS, ou dans mon cas ma Classe de gestion dynamique des items.

Pour le clone du recordset, ci-dessous le code que j'utilise
'Copie les enregistrements de poRstSource dans poRstDestination
Public Function MakeCloneRecordset(ByVal poRstSource As ADODB.Recordset, ByRef poRstDestination As ADODB.Recordset, Optional ByVal pbIgnoreData As Boolean = False, Optional ByRef paMaxLenghtFields As Variant) As Boolean
On Error GoTo Err_MakeCloneRecordset
Dim oFld As ADODB.Field, vBookmark As Variant, bEvaluateMaxLenght As Boolean, lCpt As Long

    Set poRstDestination = New ADODB.Recordset
    With poRstDestination
        .CursorLocation = adUseClient
        .CursorType = adOpenDynamic
        .LockType = adLockPessimistic
        'Initialisation de la liste des champs
        For Each oFld In poRstSource.Fields
            .Fields.Append oFld.Name, oFld.Type, oFld.DefinedSize, oFld.Attributes
        Next oFld
        'Préparation du tableau pour la recupération de la taille max des champs
        If Not IsMissing(paMaxLenghtFields) Then
            bEvaluateMaxLenght = True
            ReDim paMaxLenghtFields(1 To .Fields.Count) As Long
        End If
        
        'Ouverture du recordset pour remplissage
        .Open
    End With
    
    If Not pbIgnoreData Then
        'Remplissage du recordset
        With poRstSource
        'On peut aussi faire With poRstSource.Clone(adLockReadOnly), ainsi on ne s'embetera plus avec la gestion des bookmarks.
        'Mais je me suis demandé si ce n'était pas du temps perdu cette méthode, temps de Clone.
        'je ne me suis pas penché dessus pour voir les différences de vitesse.
            If .RecordCount <> 0 Then
                vBookmark = .Bookmark
                .MoveFirst
                Do While Not .EOF
                    poRstDestination.AddNew
                    For Each oFld In .Fields
                        lCpt = lCpt + 1
                        poRstDestination.Fields(oFld.Name).Value = oFld.Value
                        If bEvaluateMaxLenght And Not IsNull(oFld.Value) Then paMaxLenghtFields(lCpt) = MaxValues(paMaxLenghtFields(lCpt), Len(Str(oFld.Value)))
                    Next oFld
                    poRstDestination.Update
                    .MoveNext
                Loop
                .Bookmark = vBookmark
                poRstDestination.MoveFirst
            End If
        End With
    End If
    
    MakeCloneRecordset = True

Exit_MakeCloneRecordset:
    Exit Function

Err_MakeCloneRecordset:
    MsgBox Err.Description
    Resume Exit_MakeCloneRecordset
End Function

Merci encore.
A+


Le : 27/10/2008 16:30:48
Source : CRYPTAGE ET DÉCRYPTAGE DE CHAÎNES ET DE FICHIERS [MODULE DE CLASSE]
Oui en fait c'est bien d'un RS que je parle, peu importe que ce soit une table ou résultat de requête.

Ce n'est nullement pas dans le but de me faire une BD propriétaire.

En fait j'ai crée pour mon exploitation perso des composants permettant de piloter une appli entière depuis une base de données personnalisée. Cette base de données contient la structure de toutes les tables de la BD, les menus, les paramètres, la structure de tous les combos, la structure des formualaires, .... Ces composants creent dynamiquement les contrôles des formulaires en fonction des commandes. Aucun souci vitesse, on n'a même pas l'impression.

C'est cette base de données perso que je veux crypter question de protéger ma technique. En effet il suffit d'avoir ses composants et connaitre la structure de cette base de données perso pour me copier le Copyright.

Ta source m'intéresse effectivement pour crypter chaque table de ma bd perso (bd non relationnelle, je n'en ai pas besoin puisque c'est moi qui la fournit) et de pouvoir la mettre en mémoire, ce que je fais déjà en ce moment à la différence que la source n'est pas crypter et la technique non protégée.
Dans tous les cas je dois passer par là, mais s'il y'a déjà une source ready to use, c'est plutot mieux de démarrer sur des references qui marchent.

NB: Je suis uniquement intéressé par la méthode de Fichier crypter à mémoire. Donc d'une classe ayant les caractéristiques similaires d'un RS, mais avec juste en plus la propriété pour indiquer le chemin du fichier source et la code de cryptage.


Le : 27/10/2008 11:13:09
Source : CRYPTAGE ET DÉCRYPTAGE DE CHAÎNES ET DE FICHIERS [MODULE DE CLASSE]
super intéressant.

Je te fais une proposition si tu peux la trouver intéressante.
l'ajout de la méthode (dé)cryptage de recordset.
Pour le cryptage envoie en paramètres le ADODB.Recordset et pour le décryptage pareil retour d'un recordset (bien évidemment le résultat sera dans un paramètre Byref).

En fait tu traites déjà, disons 80% de ce cas avec les méthodes "(dé)cryptage de tableau de byte" vu que tu tiens compte de la dimension du tableau.
La seule différence pour le recordset sera dans le fichier de cryptage de sauvegarder à l'entête la définition des champs et pour le décryptage la reconstitution du recordset. Cette méthode sera d'autant plus intéressante que le décryptage se fait en mémoire.

Si tu faisais cette mise jour je suis preneur, je pense qu'il y'aurait pas mal d'application.



Le : 23/10/2008 14:02:24
Source : CODYXSEARCH - INTÉGREZ LE MOTEUR CODYX À VOTRE IDE POUR CHERCHER, COPIER, INSÉRER, ET ARCHIVER DES SNIPPETS [ADDIN VB6]
Je pensais à un test sans lancer de recherches.

L'histo des mises à jour date encore du 21, tu as déposé une mise à jour?


Le : 23/10/2008 10:39:49
Source : CODYXSEARCH - INTÉGREZ LE MOTEUR CODYX À VOTRE IDE POUR CHERCHER, COPIER, INSÉRER, ET ARCHIVER DES SNIPPETS [ADDIN VB6]
Juste un truc PCPT, peux tu rajouter un indicateur pour remarquer si le serveur est dispo en jouant par exemple sur la couleur de la barre de titre par exemple, couleur pale pas de connexion, couleur vive serveur accessible.
La saisie semi-automatique serait aussi un bon truc. Elle peut être basée sur les recherches déjà effectuées ou sur la liste des mots clés directement sur le site.
Si c'est possible ce serait encore plus cool pour moi.


Le : 22/10/2008 14:25:33
Source : DECOMPOSITION SQL - ALGORITHME SIMPLE ET EFFICACE
Merci EBARTSOFT, venant de toi c'est un grand compliment.


Le : 22/10/2008 11:45:04
Source : DECOMPOSITION SQL - ALGORITHME SIMPLE ET EFFICACE
@Vladam: Je n'ai pas bien compris, en effet je ne cherches qu'à savoir plus si tu pouvais être plus explicite. Je profite également pour ajouter un autre intérêt de la decomposition SQL c'est de pouvoir ajouter/modifier des légendes ou les traduires dans une langue. Il suffira de rajouter des mots clés et après avoir identifier les captions, lire dans une table dictionnaire pour traduire en fonction de la langue choisie au démarrage de l'applis.

Je profite pour corriger un manquement dans la fonction TransformSQL
Remplacer "bParenthesisOpen As Boolean" par "lParenthesisOpen As Long"
et dans le corps de la procédure on aura plutôt
                Select Case sCar
                    Case "(": lParenthesisOpen = lParenthesisOpen + 1
                    Case ")": lParenthesisOpen = lParenthesisOpen - 1
                    Case ",":
                        If (Not bNameBegin) And (lParenthesisOpen = 0) Then
...

NB :
Le but de cette source n'est pas de vérifier la validité d'une SQL mais de la decomposer en supposant qu'à l'origine elle est valide. Sa grande utilité est de permettre l'optimisation des resultats de recordset.
Pour mon utilisation j'ai 2 méthodes la méthodes Refresh qui va faire un .Filter et un .Sort sur les variables sFiltre et sSort et la méthode Requery qui va reécrer la SQL en incluant sFiltre et sSort dans la SQL.

C'est dommage de ne pas avoir des retours d'utilisation qui bien évidemment permettent de faire évoluer le code et surtout d'avoir les mises à jour sinon certaines mises à jour ne se voient pas reloader.


Le : 22/10/2008 11:00:46
Source : CODYXSEARCH - INTÉGREZ LE MOTEUR CODYX À VOTRE IDE POUR CHERCHER, COPIER, INSÉRER, ET ARCHIVER DES SNIPPETS [ADDIN VB6]
Super PCPT, même à vendre je prendrais, très utile ton truc.


Le : 21/10/2008 11:48:16
Source : DECOMPOSITION SQL - ALGORITHME SIMPLE ET EFFICACE
@Vladam: C'est sûr tu n'as rien compris. Je t'explique.

Moi je travaille avec des composants independants, ce qui suppose qu'à la base il ne sait pas quel paramètre il recevra. Alors pour mon composant permettant d'afficher les données d'une base de données, il recoit en paramètres la SQL (CommandText) et la connectionString. Maintenant supposons que nous avons un combo dont la sélection entraine un filtre de la liste.
Solution evidente, tu me diras de mettre des indicateurs dans la SQL de la liste à afficher de facon à former facilement la SQL filtrée. MAis dans mon cas il s'agit d'un composant indépendant qui ne sait pas à priori le contenu de la SQL.
Autre méthode si la liste est dans un datagrid, il suffit de lier le datagrid.datasource au Recordset resultant de la commande et apres de faire un filter. Super ca marche mais lorsque la liste à afficher sans filtre contient 30 000 enregistrements alors on comprend vite qu'il y'a un problème.
Mon composant permet de jouer avec la SQL et la liste est optimale.
Il suffit pour moi de definir la methode Init pour passer la SQL, Criteria definir une condition et la méthode Requery et tout est propre et bien.

De même comme dans mon cas si tu dois permettre à l'utilisateur de choisir les champs visibles, definir son tri et definir ses filtres. A moins de connaitre explicitement la SQL ce n'est pas evident.
Eh bien j'ai egalement un composant qui recoit en parametres une SQL, pour t'afficher un form avec onglets (Colonnes, Tri, Fitre) libre à l'utilisateur de bidouiller après le composant peut renvoyer la SQL resultat ou tous les paramètres afin que le programmeur en fasse ce qu'il veut.

Ca devrait être déjà assez clair à ce niveau je crois.



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,140 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.