Υπηρεσία SFDatabases.Database

Η υπηρεσία Database (Βάση δεδομένων) παρέχει πρόσβαση σε βάσεις δεδομένων είτε ενσωματωμένες, είτε περιγράφονται στα έγγραφα Base. Αυτή η υπηρεσία παρέχει μεθόδους για:

Κάθε παρουσία της υπηρεσίας Database (Βάση δεδομένων) αντιπροσωπεύει μια ενιαία βάση δεδομένων και παρέχει πρόσβαση στους πίνακες, στα ερωτήματα και στα δεδομένα της.

Αυτή η υπηρεσία δεν παρέχει πρόσβαση σε φόρμες ή αναφορές στο έγγραφο Base που περιέχει τη βάση δεδομένων. Για πρόσβαση σε φόρμες σε ένα έγγραφο Base, ανατρέξτε στη μέθοδο FormDocuments της υπηρεσίας Base.

note

Όλες οι ανταλλαγές μεταξύ αυτής της υπηρεσίας και της βάσης δεδομένων γίνονται μόνο με χρήση SQL.


Οι δηλώσεις SQL μπορούν να εκτελούνται σε άμεση ή έμμεση κατάσταση. Σε άμεση κατάσταση η δήλωση μεταφέρεται στη μηχανή βάσης δεδομένων χωρίς κανένα έλεγχο σύνταξης ή εξέτασης.

Οι παρεχόμενες διεπαφές περιλαμβάνουν απλούς πίνακες και καταλόγους ερωτημάτων, καθώς και πρόσβαση σε δεδομένα βάσης δεδομένων.

tip

Για να κάνετε τις προτάσεις SQL πιο ευανάγνωστες, μπορείτε να χρησιμοποιήσετε αγκύλες "[ ]" για να περικλείσετε ονόματα πινάκων, ερωτημάτων και πεδίων αντί να χρησιμοποιήσετε άλλους χαρακτήρες περίκλεισης που μπορεί να είναι αποκλειστικοί σε ορισμένα Συστήματα Διαχείρισης Σχεσιακών Βάσεων Δεδομένων (RDBMS). Αλλά προσέξτε ότι οι χαρακτήρες που εσωκλείονται είναι υποχρεωτικοί σε αυτό το περιβάλλον.


Κλήση υπηρεσίας

Πριν τη χρήση της υπηρεσίας Database (Βάση δεδομένων) πρέπει να φορτωθεί ή να εισαχθεί η βιβλιοθήκη ScriptForge:

note

• Οι μακροεντολές Basic απαιτούν τη φόρτωση της βιβλιοθήκης ScriptForge χρησιμοποιώντας την ακόλουθη πρόταση:
GlobalScope.BasicLibraries.loadLibrary("ScriptForge")

• Τα σενάρια Python απαιτούν εισαγωγή από την ενότητα scriptforge:
από το scriptforge import CreateScriptService


Σύνταξη:

Για να δημιουργήσετε μια παρουσία της υπηρεσίας Database (Βάση δεδομένων), μπορείτε να χρησιμοποιήσετε τη μέθοδο CreateScriptService:

CreateScriptService("SFDatabases.Database", [filename: str], [registrationname], [readonly], [user, [password]]): svc

note

Στη σύνταξη που περιγράφεται παραπάνω, μπορείτε να χρησιμοποιήσετε είτε το "SFDatabases.Database", είτε απλά το "Database" ως το πρώτο όρισμα της μεθόδου CreateScriptService.


Παράμετροι:

filename: (όνομα αρχείου) Το όνομα του αρχείου Base. Πρέπει να εκφράζεται με τη σημειογραφία SF_FileSystem.FileNaming.

registrationname: (όνομα καταχώρησης) Το όνομα μιας καταχωρημένης βάσης δεδομένων. Εάν παρέχεται το filename, αυτό το όρισμα δεν θα πρέπει να χρησιμοποιηθεί.

Αντίθετα, εάν έχει καθοριστεί ένα registrationname (όνομα εγγραφής), η παράμετρος filename δεν θα πρέπει να οριστεί.

readonly (μόνο για ανάγνωση): Καθορίζει εάν η βάση δεδομένων θα ανοίξει ως μόνο για ανάγνωση (Προεπιλογή = True).

user, password (χρήστης, κωδικός πρόσβασης): Πρόσθετες παράμετροι σύνδεσης στον διακομιστή της βάσης δεδομένων.

Παράδειγμα:

Σε Basic

      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDatabase as Object
      Set myDatabase = CreateScriptService("Database", "/home/user/Documents/myDB.odb")
      ' Εκτέλεση ερωτημάτων, δηλώσεων SQL, ...
      myDatabase.CloseDatabase()
    
Σε Python

      from scriptforge import CreateScriptService
      myDatabase = CreateScriptService("Database", "/home/user/Documents/myDB.odb")
      # Εκτέλεση ερωτημάτων, δηλώσεων SQL, ...
      myDatabase.CloseDatabase()
    

Πρόσβαση σε βάσεις δεδομένων με την υπηρεσία διεπαφής χρήστη (UI)

Είναι επίσης δυνατή η πρόσβαση στη βάση δεδομένων που σχετίζεται με ένα έγγραφο Base χρησιμοποιώντας την υπηρεσία ScriptForge.UI, όπως φαίνεται στα παρακάτω παραδείγματα:

Σε Basic

      Dim myDoc As Object, myDatabase As Object, ui As Object
      Set ui = CreateScriptService("UI")
      Set myDoc = ui.OpenBaseDocument("/home/user/Documents/myDB.odb")
      ' Ο χρήστης και ο κωδικός πρόσβασης παρέχονται παρακάτω, εάν χρειάζεται
      Set myDatabase = myDoc.GetDatabase()
      ' Εκτέλεση ερωτημάτων, δηλώσεων SQL, ...
      myDatabase.CloseDatabase()
      myDoc.CloseDocument()
    
Σε Python

      ui = CreateScriptService("UI")
      doc = ui.OpenBaseDocument("/home/user/Documents/myDB.odb")
      # Ο χρήστης και ο κωδικός πρόσβασης παρέχονται παρακάτω, εάν χρειάζεται
      myDatabase = doc.GetDatabase()
      # Εκτέλεση ερωτημάτων, δηλώσεων SQL, ...
      myDatabase.CloseDatabase()
      doc.CloseDocument()
    
tip

Η μέθοδος GetDatabase που χρησιμοποιείται στο παραπάνω παράδειγμα αποτελεί μέρος της υπηρεσίας ScriptForge της Base .


Ιδιότητες

Όνομα

Μόνο για ανάγνωση

Τύπος

Περιγραφή

Queries

Ναι

Πίνακας συμβολοσειρών

Ο κατάλογος των αποθηκευμένων ερωτημάτων.

Tables

Ναι

Πίνακας συμβολοσειρών

Ο κατάλογος των αποθηκευμένων πινάκων.

XConnection

Ναι

XConnection

Το αντικείμενο UNO που αντιπροσωπεύει την τρέχουσα σύνδεση της βάσης δεδομένων.

XMetaData

Ναι

XDatabaseMetaData

Το αντικείμενο UNO που αντιπροσωπεύει τα μεταδεδομένα που περιγράφουν τα χαρακτηριστικά του συστήματος της βάσης δεδομένων.


Κατάλογος μεθόδων στην υπηρεσία βάσης δεδομένων

CloseDatabase
DAvg
DCount

DMin
DMax
DSum

DLookup
GetRows
RunSql


CloseDatabase

Κλείνει την τρέχουσα σύνδεση της βάσης δεδομένων.

Σύνταξη:

db.CloseDatabase()

Παράδειγμα:


    myDatabase.CloseDatabase() ' Basic
  

    myDatabase.CloseDatabase() # Python
  

DAvg, DCount, DMin, DMax, DSum

Υπολογίζει τη δεδομένη αθροιστική συνάρτηση σε ένα πεδίο ή παράσταση που ανήκει σε έναν πίνακα.

Προαιρετικά, μια πρόταση SQL WHERE μπορεί να καθοριστεί ως φίλτρο που θα εφαρμοστεί πριν από τη συγκεντρωτική συνάρτηση.

Σύνταξη:

db.DAvg(expression: str, tablename: str, [criteria: str]): any

db.DCount(expression: str, tablename: str, [criteria: str]): any

db.DMin(expression: str, tablename: str, [criteria: str]): any

db.DMax(expression: str, tablename: str, [criteria: str]): any

db.DSum(expression: str, tablename: str, [criteria: str]): any

Παράμετροι:

expression (έκφραση): Μια έκφραση SQL στην οποία τα ονόματα των πεδίων περιβάλλονται με αγκύλες.

tablename : Όνομα πίνακα (χωρίς αγκύλες).

criteria (κριτήρια): Μια πρόταση WHERE χωρίς τη λέξη-κλειδί "WHERE", στην οποία τα ονόματα πεδίων περιβάλλονται με αγκύλες.

Παράδειγμα:

Το παρακάτω παράδειγμα υποθέτει ότι το αρχείο Employees.odb έχει έναν πίνακα με το όνομα EmployeeData.

Σε Basic

      GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
      Dim myDB as Variant
      Set myDB = CreateScriptService("Database", "/home/user/Databases/Employees.odb")
      ' Μετρά τον αριθμό των εργαζομένων στον πίνακα
      MsgBox myDB.DCount("[ID]", "EmployeeData")
      ' Επιστρέφει το άθροισμα όλων των μισθών του πίνακα
      MsgBox myDB.DSum("[Salary]", "EmployeeData")
      ' Παρακάτω είναι μερικά παραδείγματα του τρόπου φιλτραρίσματος των πινάκων
      MsgBox myDB.DCount("[ID]", "EmployeeData", "[Position] = 'Manager'")
      MsgBox myDB.DCount("[ID]", "EmployeeData", "[Position] = 'Sales' AND [City] = 'Chicago'")
      MsgBox myDB.DCount("[ID]", "EmployeeData", "[FirstName] LIKE 'Paul%'")
    
Σε Python

      myDB = CreateScriptService("Database", "/home/user/Databases/Employees.odb")
      bas = CreateScriptService("Basic")
      bas.MsgBox(myDB.DCount("[ID]", "EmployeeData"))
      bas.MsgBox(myDB.DSum("[Salary]", "EmployeeData"))
      bas.MsgBox(myDB.DCount("[ID]", "EmployeeData", "[Position] = 'Manager'"))
      bas.MsgBox(myDB.DCount("[ID]", "EmployeeData", "[Position] = 'Sales' AND [City] = 'Chicago'"))
      bas.MsgBox(myDB.DCount("[ID]", "EmployeeData", "[FirstName] LIKE 'Paul%'"))
    

DLookup

Υπολογίζει μια έκφραση SQL σε μια μεμονωμένη εγγραφή που επιστρέφεται από μια πρόταση WHERE που ορίζεται από την παράμετρο Criteria.

Εάν το ερώτημα επιστρέφει πολλές εγγραφές, λαμβάνεται υπόψη μόνο η πρώτη. Χρησιμοποιήστε την παράμετρο OrderClause για να προσδιορίσετε πώς ταξινομούνται τα αποτελέσματα των ερωτημάτων.

Σύνταξη:

db.DLookup(expression: str, tablename: str, [criteria:str], [orderclause: str]): any

Παράμετροι:

expression (έκφραση): Μια έκφραση SQL στην οποία τα ονόματα των πεδίων περιβάλλονται με αγκύλες.

tablename : Όνομα πίνακα (χωρίς αγκύλες).

criteria (κριτήρια): Μια πρόταση WHERE χωρίς τη λέξη-κλειδί "WHERE", στην οποία τα ονόματα πεδίων περιβάλλονται με αγκύλες.

orderclause : Μια πρόταση ORDER BY χωρίς τις λέξεις-κλειδιά "ORDER BY". Τα ονόματα των πεδίων πρέπει να περιβάλλονται με αγκύλες.

Παράδειγμα:

Σε Basic

      MsgBox myDB.DLookup("[FirstName]", "EmployeeData", Criteria := "[LastName] LIKE 'Smith'", OrderClause := "[FirstName] DESC")
      MsgBox myDB.DLookup("[Salary]", "EmployeeData", Criteria := "[ID] = '3'")
      MsgBox myDB.DLookup("[Quantity] * [Value]", "Sales", Criteria := "[SaleID] = '5014'")
    
Σε Python

      bas = CreateScriptService("Basic")
      bas.MsgBox(myDB.DLookup("[FirstName]", "EmployeeData", criteria = "[LastName] LIKE 'Smith'", orderclause = "[FirstName] DESC"))
      bas.MsgBox(myDB.DLookup("[Salary]", "EmployeeData", criteria = "[ID] = '3'"))
      bas.MsgBox(myDB.DLookup("[Quantity] * [Value]", "Sales", criteria = "[SaleID] = '5014'"))
    

GetRows

Αποθηκεύει τα περιεχόμενα ενός πίνακα ή τα αποτελέσματα ενός ερωτήματος SELECT, ή μιας πρότασης SQL σε έναν δισδιάστατο πίνακα. Το πρώτο ευρετήριο στον πίνακα αντιστοιχεί στις σειρές και το δεύτερο ευρετήριο αναφέρεται στις στήλες.

Μπορεί να καθοριστεί ένα ανώτερο όριο για τον αριθμό των σειρών που επιστρέφονται. Προαιρετικά, τα ονόματα στηλών μπορούν να εισαχθούν στην πρώτη σειρά του πίνακα.

Ο πίνακας που επιστρέφεται θα είναι κενός, εάν δεν επιστραφούν σειρές και δεν απαιτούνται οι κεφαλίδες στηλών.

Σύνταξη:

db.GetRows(sqlcommand: str, directsql: bool = False, header: bool = False, maxrows: int = 0): any

Παράμετροι:

sqlcommand: Ένα όνομα πίνακα ή ερωτήματος (χωρίς αγκύλες), ή μια πρόταση SQL SELECT.

directsql: Όταν είναι True, η εντολή SQL αποστέλλεται στη μηχανή βάσης δεδομένων χωρίς προανάλυση. Η προεπιλογή είναι False. Αυτό το όρισμα αγνοείται για πίνακες. Για τα ερωτήματα, η επιλογή που εφαρμόστηκε είναι αυτή που ορίστηκε όταν ορίστηκε το ερώτημα.

header (κεφαλίδα): Όταν είναι True, η πρώτη σειρά του πίνακα που επιστρέφεται περιέχει τις κεφαλίδες των στηλών.

maxrows: Ο μέγιστος αριθμός σειρών προς επιστροφή. Η προεπιλογή είναι μηδέν, που σημαίνει ότι δεν υπάρχει όριο στον αριθμό των σειρών που επιστρέφονται.

Παράδειγμα:

Ακολουθούν μερικά παραδείγματα για το πώς μπορεί να χρησιμοποιηθεί η μέθοδος GetRows:

Σε Basic

      Dim queryResults as Variant
      ' Επιστρέφει όλες τις σειρές στον πίνακα με κεφαλίδες στηλών
      queryResults = myDB.GetRows("EmployeeData", Header := True)
      ' Επιστρέφει τις πρώτες 50 εγγραφές εργαζομένων που ταξινομήθηκαν από το πεδίο 'FirstName' (Όνομα)
      queryResults = myDB.GetRows("SELECT * FROM EmployeeData ORDER BY [FirstName]", MaxRows := 50)
    
Σε Python

      queryResults = myDB.GetRows("EmployeeData", header = True)
      queryResults = myDB.GetRows("SELECT * FROM EmployeeData ORDER BY [FirstName]", maxrows = 50)
    

RunSql

Εκτελεί ένα ερώτημα ενέργειας μιας πρότασης SQL, όπως δημιουργία πίνακα, καθώς και εισαγωγή, ενημέρωση και διαγραφή εγγραφών.

Η μέθοδος επιστρέφει True όταν είναι επιτυχής.

tip

Η μέθοδος RunSql απορρίπτεται με μήνυμα σφάλματος σε περίπτωση που η βάση δεδομένων είχε ανοίξει προηγουμένως σε λειτουργία μόνο για ανάγνωση.


Σύνταξη:

db.RunSql(sqlcommand: str, directsql: bool = False): bool

Παράμετροι:

sqlcommand: Ένα όνομα ερωτήματος (χωρίς αγκύλες) ή μια πρόταση SQL.

directsql: Όταν είναι True, η εντολή SQL αποστέλλεται στη μηχανή βάσης δεδομένων χωρίς προανάλυση. (Προεπιλογή = False). Για τα ερωτήματα, η επιλογή που εφαρμόστηκε είναι αυτή που ορίστηκε όταν ορίστηκε το ερώτημα.

Παράδειγμα:

Σε Basic

      myDatabase.RunSql("INSERT INTO [EmployeeData] VALUES(25, 'Smith', 'John')", DirectSQL := True)
    
Σε Python

      myDatabase.RunSql("INSERT INTO [EmployeeData] VALUES(25, 'Smith', 'John')", directsql = True)
    
warning

Όλες οι ρουτίνες ή αναγνωριστικά του ScriptForge στη Basic που έχουν το πρόθεμα χαρακτήρα υπογράμμισης "_" δεσμεύονται για εσωτερική χρήση. Δεν προορίζονται να χρησιμοποιηθούν σε μακροεντολές Basic ή σενάρια Python.


Παρακαλούμε, υποστηρίξτε μας!