Find

Article
· Jun 26, 2024 1m read

Comment éviter les timeouts pour les requêtes ODBC

InterSystems FAQ rubric

Pour désactiver le délai d'attente, réglez le délai d'attente de la requête sur désactivé dans les paramètres DSN :

Panneau de configuration de Windows > Outils d'administration > Sources de données (ODBC) > Configuration DSN du système

Si vous cochez la case Désactiver le délai d'attente des requêtes, le délai d'attente sera désactivé.

Si vous souhaitez le modifier du côté de l'application, vous pouvez le définir au niveau de l'API ODBC.

Définissez l'attribut SQL_ATTR_QUERY_TIMEOUT lorsque vous appelez la fonction ODBC SQLSetStmtAttr avant de vous connecter à la source de données.

Discussion (0)1
Log in or sign up to continue
Article
· Jun 26, 2024 2m read

Fonction permettant d'obtenir les dates de début et de fin d'un mois

Si vous voulez obtenir le premier et le dernier jour d'un mois, j'ai une ClassMethod à vous proposer (version 2, correction d'une erreur trouvée par Eduard) :

ClassMethod GetMonthPeriods(InitialYear As %Integer, EndYear As %Integer) As %Status
{
    set sc = $$$OK
    set result = []
    For CurrentYear = InitialYear:1:EndYear {
        For CurrentMonth = 1:1:12 {
            set item = {}
            If CurrentMonth < 10 {
                Set CurrentMonthStr = "0"_CurrentMonth
            } Else {
                Set CurrentMonthStr = ""_CurrentMonth
            }
            Set item.StartDate = CurrentYear_"-"_CurrentMonthStr_"-01T00:00:00"
            Set NextMonth = CurrentMonth + 1
            If NextMonth = 13 {
                Set item.EndDate = CurrentYear_"-12-31T23:59:59"
            } Else {
                Set NextDate = $SYSTEM.SQL.Functions.TODATE(CurrentYear_"-"_NextMonth_"-01","YYY-MM-DD")
                Set NextDate = $INCREMENT(NextDate,-1)
                set item.EndDate = $ZDate(NextDate,3)_"T23:59:59"
            }
            
            Do result.%Push(item)
        }
    }
    Write result.%ToJSON()

    Return sc
}

$SYSTEM.SQL.Functions.TODATE convertit une chaîne en date et $INCREMENT permet d'incrémenter ou de décrémenter un jour à partir d'une date. Lorsque j'appelle cette méthode ..GetMonthPeriods(2022,2022) j'obtiens ceci :

[
    {
        "StartDate": "2022-01-01T00:00:00",
        "EndDate": "2022-01-31T23:59:59"
    },
    {
        "StartDate": "2022-02-01T00:00:00",
        "EndDate": "2022-02-28T23:59:59"
    },
    {
        "StartDate": "2022-03-01T00:00:00",
        "EndDate": "2022-03-31T23:59:59"
    },
    {
        "StartDate": "2022-04-01T00:00:00",
        "EndDate": "2022-04-30T23:59:59"
    },
    {
        "StartDate": "2022-05-01T00:00:00",
        "EndDate": "2022-05-31T23:59:59"
    },
    {
        "StartDate": "2022-06-01T00:00:00",
        "EndDate": "2022-06-30T23:59:59"
    },
    {
        "StartDate": "2022-07-01T00:00:00",
        "EndDate": "2022-07-31T23:59:59"
    },
    {
        "StartDate": "2022-08-01T00:00:00",
        "EndDate": "2022-08-31T23:59:59"
    },
    {
        "StartDate": "2022-09-01T00:00:00",
        "EndDate": "2022-09-30T23:59:59"
    },
    {
        "StartDate": "2022-10-01T00:00:00",
        "EndDate": "2022-10-31T23:59:59"
    },
    {
        "StartDate": "2022-11-01T00:00:00",
        "EndDate": "2022-11-30T23:59:59"
    },
    {
        "StartDate": "2022-12-01T00:00:00",
        "EndDate": "2022-12-31T23:59:59"
    }
]
Discussion (0)1
Log in or sign up to continue
Article
· Jun 26, 2024 3m read

Embedded Python, Utilisation des paramètres de sortie

Contexte

Dans les versions >=2021.2 d'InterSystems IRIS, nous pouvons utiliser le [binaire irispython pour écrire directement du code python au-dessus de nos instances IRIS] (https://docs.intersystems.com/iris20212/csp/docbook/DocBook.UI.Page.cls?...). Cela nous permet d'utiliser des paquets python, d'appeler des méthodes, de faire des requêtes SQL et de faire à peu près tout ce qui se fait en Objectscript mais en python.

Discussion (0)1
Log in or sign up to continue
Article
· Jun 26, 2024 1m read

Obtenir une liste des requêtes mises en cache et de leurs textes

Récemment, j'ai voulu obtenir une liste de toutes les requêtes mises en cache et de leurs textes. Voici comment procéder.

Créez d'abord une procédure SQL renvoyant le texte de la requête mise en cache à partir d'un nom de routine de requête mise en cache :

Class test.CQ
{

/// SELECT test.CQ_GetText()
ClassMethod GetText(routine As %String) As %String [ CodeMode = expression, SqlProc ]
{
##class(%SQLCatalog).GetCachedQueryInfo(routine)
}

}

Ensuite, vous pouvez exécuter cette requête :

SELECT Routine, test.CQ_GetText(Routine)
FROM %SQL_Manager.CachedQueryTree()

Et obtenir une liste des requêtes mises en cache :

Discussion (0)1
Log in or sign up to continue
Article
· Jun 26, 2024 2m read

Comment télécharger des fichiers images à partir d'un serveur FTP ?

InterSystems FAQ rubric

La procédure de téléchargement à partir d'un serveur FTP est la suivante.

1. Télécharger le fichier image sur le serveur FTP

 set tmpfile="c:\temp\test.jpg"
 set ftp=##class(%Net.FtpSession).%New() 
 // connect to FTP server
 do ftp.Connect("","<username>","<password>")
 // set transfer mode to BINARY
 do ftp.Binary()
 // Move to the directory to upload
 do ftp.SetDirectory("/temp/upload")
 // Prepare a stream of files to upload  
 set file=##class(%File).%New(tmpfile)
 do file.Open("UK\BIN\")
 // upload file
 // 1st argument: File name to create at upload destination
 // 2nd argument: File stream to upload
 do ftp.Store("test.jpg",file)
 // Logout from ftp server
 do ftp.Logout()
 // close the file
 do file.Close()
 // (Optional) Delete the uploaded file
 //do ##class(%File).Delete(tmpfile)

2. Télécharger le fichier image à partir du serveur FTP

   set ftp=##class(%Net.FtpSession).%New()     // Connect to ftp server
    do ftp.Connect("","<username>","<password>")     // Set the transfer mode to BINARY
    do ftp.Binary()     // Prepare a file stream to download and store
    set stream=##class(%FileBinaryStream).%New()
    do stream.LinkToFile("c:\temp\testdownload.jpg")
   // Go to the download directory
    do ftp.SetDirectory("/temp/download")     // Download the file and close the stream
    do ftp.Retrieve("test.jpg",stream)
    do stream.SaveStream()
    Set stream=""     // Logout from the ftp server
    do ftp.Logout()

Discussion (0)1
Log in or sign up to continue