Veritabanı erişimi (ODBC ve SQL)
Live'ın veritabanlarıyla çalışma yolları: arşivi SQL Server'a yansıtma ve betiklerden ODBC ile sorgu / yazma; izinler, bağlantı dizesi, sınırlar ve güvenlik.
FabyaVision'da veritabanına iki ayrı yoldan erişilir ve ikisi birbirinden bağımsızdır:
| Arşiv SQL yansıtma | Betiklerden ODBC | |
|---|---|---|
| Ne için | Veri arşivinin kayıtlarını SQL Server tablosuna yazar. | Betik, herhangi bir ODBC veri kaynağından okur ya da ona yazar (parti kaydı, reçete arama …). |
| Veritabanı | Yalnızca Microsoft SQL Server. | ODBC sürücüsü olan her veritabanı. |
| Yön | Yalnız yazma (yansıtma). | Okuma ve yazma (kodunuz karar verir). |
| Nerede ayarlanır | Geçmiş Veri › Depolama (Veri arşivleri). | Betik kodu + Live Ayarları › Betik İzinleri. |
| İzin | Gerekmez. | Veritabanına bağlanma izni açık olmalı. |
Arşiv yansıtma ayrıntıları Veri arşivleri konusundadır; bu konu betiklerden ODBC erişimini anlatır.
Betiklerden ODBC
Ön koşullar
- ODBC veri kaynağını tanımlayın
Live bilgisayarında bir DSN (veri kaynağı adı) oluşturun ya da
Driver={...}bağlantı dizesi kullanın. Live 32 bit (x86) bir programdır: 64 bit Windows'ta DSN'i 32 bit ODBC yöneticisinde (C:\Windows\SysWOW64\odbcad32.exe) tanımlayın ve 32 bit sürücü kullanın. - İzni açın
Live Ayarları›Genel›Betik İzinleri›Veritabanına bağlanma anahtarını açın. İzin kapalıyken betik çalışırken hata verir; Studio, kullanımı önceden Sorunlar listesinde uyarır. Üç izin vardır (veritabanı, program çalıştırma, dosya erişimi) ve varsayılan olarak hepsi kapalıdır.
- Betiği yazın
VBS'te
ADODB.Connection,ADODB.Command,ADODB.Recordset; Python'dascada.db.connectya dapyodbc.connectkullanılır. Hazır örnekler Betikler bölümündeki Örnek kodlar… penceresinde bulunur (Veritabanı sorgusu (parametreli),Veritabanına kayıt ekleme (INSERT)ve Python karşılıkları). - Betiği bağlayın
Betiği bir düğme olayına ya da zamanlanmış göreve bağlayın (örnek: parti bitiş tag'i değişince kayıt ekleme).

Bağlantı dizesi
DSN=Uretim_VT;UID=;PWD=;biçimi ya da yalnızca veri kaynağı adı (Uretim_VT, DSN sayılır) ya daDriver={...};Server=...;biçimi kullanılır.- ADO'ya özgü
Provider=MSDASQLanahtarı kabul edilir ve atılır; başka bir sağlayıcı (SQLOLEDB,Microsoft.ACE.OLEDB…) reddedilir: “Yalnızca ODBC bağlantıları desteklenir”. - Kullanıcı adı ve şifre dizede ya da
conn.Open dize, kullanici, sifreparametrelerinde verilir. Bağlantı dizesindeki şifre betik kodunda düz metindir (proje dosyasında okunabilir); mümkünse Windows kimlik doğrulamasını (Trusted_Connection=Yes) tercih edin.
Örnek: parametreli sorgu (VBS)
Sub Veritabani_Sorgu()
Dim conn, cmd, rs
Set conn = CreateObject("ADODB.Connection")
Set cmd = CreateObject("ADODB.Command")
On Error Resume Next
conn.Open "DSN=Uretim_VT;UID=;PWD=;"
Set cmd.ActiveConnection = conn
cmd.CommandText = "SELECT RECETE_ADI, MIKTAR FROM RECETELER WHERE RECETE_KODU = ?"
cmd.Parameters.Append cmd.CreateParameter("kod", 200, 1, 50, SmartTags("Recete_Kodu"))
Set rs = cmd.Execute
If Err.Number <> 0 Then
HMIRuntime.Trace "Sorgu hatası: " & Err.Description & vbCrLf
Exit Sub
End If
On Error GoTo 0
If rs.EOF Then
SmartTags("Recete_Adi") = "(bulunamadı)"
Else
SmartTags("Recete_Adi") = rs.Fields("RECETE_ADI").Value
SmartTags("Hedef_Miktar") = rs.Fields("MIKTAR").Value
End If
rs.Close
conn.Close
End Sub
Uretim_VT yerine kendi veri kaynağınızın adını, tag adlarını ve tablo / kolon adlarını yazın. Değeri SQL metnine eklemek yerine ? parametresiyle verin: bu hem biçim sorunlarını hem de SQL enjeksiyonunu önler.
Örnek: kayıt ekleme (Python)
import pyodbc
def Py_Veritabani_Kayit_Ekle():
con = pyodbc.connect("DSN=Uretim_VT;UID=;PWD=;")
imlec = con.cursor()
imlec.execute("INSERT INTO PARTI_KAYIT (PARTI_NO, RECETE, MIKTAR, ZAMAN) VALUES (?, ?, ?, ?)",
scada.read("Parti_No"), scada.read("Recete_Adi"), scada.read("Toplam_Miktar"), scada.now())
con.commit()
con.close()
scada.write("Kayit_Tamam", True)
Çalışma kuralları ve sınırlar
| Konu | Davranış |
|---|---|
| Süre sınırı | Bağlantı açma ve komut çalıştırma için 15 saniye. |
| Satır sınırı | Bir sorgu en çok 5000 satır döndürür; fazlası kesilir (sonuçta “kesildi” işareti vardır). |
| Bağlantı durumsuzdur | Her komut kendi (havuzdan gelen) bağlantısını açıp kapatır. Geçici #tablo, SET ayarları ve işlem (transaction) komutlar arasında korunmaz; çok adımlı işlemi tek SQL komutunda (saklı yordam ya da toplu betik) yapın. |
| Bayat bağlantı | Sunucu yeniden başlamışsa havuzdaki bayat bağlantı ilk komutta hata verir; Live havuzu boşaltıp komutu bir kez yeniden dener. |
| Hata iletisi | “Veritabanı hatası (SQLSTATE): sürücü iletisi” biçimindedir (sürücü önekleri atılır). |
| Parametreler | ? yer tutucuları sırayla doldurulur; sayı, metin, bool, tarih / saat ve ikili (bytes) değerler desteklenir. |
| Arayüz bloklanmaz | Veritabanı işleri arka planda yürür; ekran donmaz. Betik, sonuç gelene kadar bekler. |
Arşiv SQL bağlantısını sınama
Arşive SQL Server yansıtma tanımladıysanız Veri Arşivleri tablosundaki Bağlantıyı sına düğmesi bağlantıyı Studio bilgisayarında dener: sunucuya bağlanır, sunucu ve veritabanı adını okur, tablonun varlığına ve yazma / oluşturma iznine bakar; hiçbir şey yazmaz. Bu sınama Live bilgisayarındaki ağ erişimini ve kimlik bilgilerini denemez; Studio ve Live farklı bilgisayarlardaysa bağlantıyı Live bilgisayarında da doğrulayın. Arşiv yansıtma hataları (bağlantı kopması, yazılamayan satır) Live'ın olay günlüğüne düşer (Veri arşivleri).
Sınırlar ve dikkat edilecekler
- Veritabanı şifreleri betik kodunda ya da arşiv bağlantı dizesinde proje dosyasında düz metin durur; dosyayı yetkisiz kişilerden koruyun.
- Betik içinden uzun süren sorgular betiği bekletir; tag değişimiyle tetiklenen bir betik önceki çağrısı sürerken yeniden tetiklenirse o çağrı atlanır (Zamanlanmış görevler).
- ODBC erişimi geliştirme denetiminde yalnızca sahte köprüyle sınanmıştır; gerçek veritabanıyla ilk denemeyi yedek bir tabloda yapın.