IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQLite Discussion :

Récupérer correctement un Int64


Sujet :

SQLite

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2023
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2023
    Messages : 97
    Par défaut Récupérer correctement un Int64
    Bonjour.
    Pour des raisons de rapidité d insertion et de calculs j insère le contenu d un fichier csv de 5 millions de lignes avec un champ LaDate que je formate en un int64 : 20250130143300 pour le 30/01/2025 14:33:00.

    Mais quand je fais une requete simple sur ce champ 'LaDate', le résultat est systématiquement : -643800239

    ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LaDate FROM Tb_Ticks WHERE LaDate > 20250130143300 limit 1
    Ma question est donc simple, comment récuperer ce type de données.

    Pour info ma base est crée ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE TABLE IF NOT EXISTS Tb_Ticks ( id INTEGER PRIMARY KEY AUTOINCREMENT, LaDate INTEGER, Last REAL, Bid REAL, Ask REAL);
    J utilise Delphi / Firedac

    Merci pour votre aide et vos conseils.

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projets retraité
    Inscrit en
    Juillet 2011
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Chef de projets retraité
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2011
    Messages : 452
    Par défaut
    Bonjour,

    Comme ça à première vue tu récupères uniquement les 32 bits de poids faible. Donc à voir sur FIREDAC comment utiliser 64 bits parce que sur SQLITE un entier peut bien avoir 64 bits.
    Pourquoi ta date est elle en entier? Est ce que c'est une date UNIX Timestamp (en secondes depuis le 01/01/1970) ou autre chose (par exemple Pour Thunderbird c'est un UNIX timestamp multiplié par 1000 (en ms))?
    Il y a d'autres moyen de stocker une date dans SQLITE (en texte ou en date Julienne) avec des conversions pour DELPHI.
    Si tu utilises DELPHI pourquoi ne pas stocker ta date comme DATETIME Delphi (Tu n'auras pas de conversion et comme c'est un réel ce devrait aussi être facile à gérer.

    Cordialement

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    C'est plus un problème Firedac que SQLite.

    Le moyen simple, utiliser le traitement des commandes de Firedac
    indiquer "nom d'alias::le type voulu"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT LaDate "ladate::INT64" FROM Tb_Ticks WHERE LaDate > 20250130143300 limit 1
    Moyen un peu plus complexe, utiliser des régles de mappage
    propriétés FormatOptions.MapRules
    Nom : Capture.png
Affichages : 57
Taille : 22,6 Ko
    et bien stipuler FormatOptions.OwnMapRules=True

    Perso, je vote pour la première solution, mais j'utiliserai plutôt un type DATETIME pour ce qui est de la structure de la table.

  4. #4
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2023
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2023
    Messages : 97
    Par défaut
    @SergioMaster : Merci, c est parfait, tout fonctionne.

    Effectivement le format choisi pour la date est particulier mais c est le résultat le plus rapide en terme de temps de conversion et d insertion entre les différents formats de dates des différents csv.
    Je mets en Bdd un fichier qui pour une semaine compte plus de 5 millions de lignes en 1 minutes 30. L insertion la plus rapide avec des formats plus traditionnels prend au moins 1 minute supplémentaire

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 593
    Billets dans le blog
    65
    Par défaut
    As-tu pensé au TFDBatchmove pour cette opération ?

  6. #6
    Membre confirmé
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2023
    Messages
    97
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Creuse (Limousin)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mars 2023
    Messages : 97
    Par défaut
    Non effectivement pke je pensais que ce n etait que pour mysql

    J ai donc cherché et suis tombé sur une vidéo explicative sur la page https://blogs.embarcadero.com/this-i...using-firedac/
    Le pb est que cette vidéo ne dure que 30 secondes !!!

    Donc j ai bien compris qu il fallait placer un TFDConnection et un TBatchmouve mais apres... Quel "reader", quel "writer"...
    Donc si tu pouvais m éclairer de tes lumières ou un lien vers un tuto.

    Je précise que j ai suivi vos conseils et mes fichiers csv sont désormais leur date au format compatible avec SQLIte afin d aviter toute manip inutile et gagner en temps. Je sais j aurais du y penser avant...

    Merci pour ton aide...

    EDIT :

    Finalement j ai trouvé un exemple mais je ne peux afficher que le code, la faute à fMainCompBase.pas manquant donc je ne peux pas explorer les composants FDquery par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    // Create text reader and set FDBatchMode as owner. Then
      // FDBatchMove will automatically manage the reader instance.
      with TFDBatchMoveTextReader.Create(FDBatchMove) do begin
        // Set text data file name
        FileName := ExtractFilePath(Application.ExeName) + 'Data.txt';
        // Setup file format
        DataDef.Separator := ';';
        DataDef.WithFieldNames := True;
      end;
      // Create dataset writer and set FDBatchMode as owner. Then
      // FDBatchMove will automatically manage the writer instance.
      with TFDBatchMoveDataSetWriter.Create(FDBatchMove) do begin
        // Set destination dataset
        DataSet := qryLoaded;
        // Do not set Optimise to True, if dataset is attached to UI
        Optimise := False;
      end;
      // Analyze source text file structure
      FDBatchMove.GuessFormat;
      FDBatchMove.Execute;
     
      // show data in dbgrid
      qryLoaded.Open;
    je ne sais pas à quoi correspond qryLoaded et DataSet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Faites des messages corrects !!!
    Par Alacazam dans le forum C++
    Réponses: 6
    Dernier message: 23/03/2006, 15h56
  2. savoir si outlook s'est fermé correctement
    Par iubito dans le forum API, COM et SDKs
    Réponses: 9
    Dernier message: 07/11/2003, 08h41
  3. [IB71] mon Blob ne marche pas correctement
    Par BoeufBrocoli dans le forum InterBase
    Réponses: 2
    Dernier message: 17/09/2003, 14h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo