Ocena wątku:
  • 0 Głosów - 0 Średnio
  • 1
  • 2
  • 3
  • 4
  • 5
Dostęp do użytkownika i przedrostka tabeli
27-07-2022, 12:29,
#1
Exclamation  Dostęp do użytkownika i przedrostka tabeli
Witam,

Od kilku dni zmagam się z problemem zmiany przedrostka (zapewne chodzi o nazwę schematu bazy danych) oraz użytkownika podczas wczytywania źródła danych.

Wprowadziłem możliwość zmiany wczytywania nazwy schematu (województwa), dzięki czemu powiaty z danego województwa dostosowują się do akuratnie wybranego schematu bazy, ale załączony kod nie wczytuje zmiany schematu i użytkownika (choć go pobiera z pola tekstowego) do źródła danych (czerowna ramka w zrzucie- TERYT przy klasie BDOT10k potwierdza że nie jest prawidłowe).

Kod to PyQt do tworzenia wtyczek do QGIS.

Z Góry dziękuje za każdą pomoc.


Kod:
 config = configparser.ConfigParser()
       config.read(str(mainPath)+'/SystemBDOT10k.ini')
       config.set('oracle', 'schema', base64.b64encode((self.dlg.lineEdit.text()).encode('utf-8')).decode('utf-8'))
       
       config.set('oracle', 'password', base64.b64encode((self.dlg.lineEdit_2.text()).encode('utf-8')).decode('utf-8'))
       config.set('oracle', 'database', self.dlg.lineEdit_3.text())
       config.set('oracle', 'port', self.dlg.lineEdit_4.text())
       config.set('UstawieniaOgolne', 'oznaczenieZmiany', self.dlg.lineEdit_6.text())
       #aktualizacjab listy powiatów w zakładce "Operacje na danych"  
       connectionParam = config['oracle']
       schema = (base64.b64decode((connectionParam['Schema']).encode('utf-8'))).decode('utf-8')
       print (schema)
       password = (base64.b64decode((connectionParam['Password']).encode('utf-8'))).decode('utf-8')
       port = connectionParam['Port']
       host = connectionParam['Host']
       # Połączenie do bazy danych
       database = connectionParam['Database']
       oznaczenieZmiany = config['UstawieniaOgolne']['oznaczenieZmiany']
       db = QSqlDatabase.addDatabase("QOCISPATIAL")
       db.setDatabaseName(host + ':' + port + '/' + database)
       db.setPassword(password)
       db.setUserName(schema)
       ok = db.open()  


Załączone pliki Miniatury
   
27-07-2022, 23:00,
#2
RE: Dostęp do użytkownika i przedrostka tabeli
Tak to opisałeś, że nie bardzo wiadomo o co chodzi... 

Tworzysz klasę config. Czytasz .ini  
Potem ustawiasz wartości dla poszczególnych parametrów odczytanych z .ini (nie wiadomo jak ten plik u Ciebie wygląda). 
Następnie robisz coś z wpisami pod UstawieniaOgolne i aktualizujesz jakąś listę powiatów. 
Potem umożliwiasz wpisanie usera/schematu (Oracle więc, to można powiedzieć, że to jest jednoznaczne) i hasło. 
Na końcu tworzysz połączenie. 
Parametry połączenia to są zwykłe str czy tam int (port). 
Więc po prostu przed zestawieniem połączenia musisz sobie złożyć te atrybuty  i ustawić je dla obiektu db.
Mam wrażenie, że coś przekombinowałeś tak to komplikując (albo wyciąłeś istotne fragmenty kodu, bo zakomentowane masz linie z opisem, że coś aktualizujesz w zakładkach itp.)
Przeanalizuj sobie na spokojnie co i jak robisz, gdzie trzymasz poszczególne parametry połączenia, w jakich momentach się one zmieniają, bo wygląda, że w tym tkwi problem. Wtedy powinieneś sobie z nim poradzić.

Tak przy okazji, chcesz robić schematy/userów z nazw województw? Oczywiście nie używasz w nich polskich znaków? Używanie Oracle’a w połączeniu z QGIS uważam za masochizm, ale co kto lubi ?
03-08-2022, 08:40,
#3
RE: Dostęp do użytkownika i przedrostka tabeli
Tak, parametrami połączenia są zwykle stringi (województwa są zamieniane przez WODGIK02...32) i ustawiłem ich złożenie

Czyli jak rozumiem zmiana nazwy schematu i hasło do niego ma iść do .ini, gdzie mają być na bieżąco aktualizowane?

Jeśli tak to dziękuje (czyli muszę wprowadzić kod tak, aby plik .ini się zmieniał w zależności od ustawionych parametrów).
Jak dalej będę mieć z tym problemy to dam znać
03-08-2022, 10:31,
#4
RE: Dostęp do użytkownika i przedrostka tabeli
Wszystko zależy od tego jak działa twój plugin.
Do zmienionego połączenia powinieneś wyciągnąć dane z ini i podmienić sobie 2 zmienne schemat/user i pass (bo tak chyba działasz)
W Twoim przypadku wygląda, że nie robisz tej podmiany, albo wydaje Ci się, że robisz, ale aplikacja ciągle używa danych odczytanych z ini.
Musisz sobie sprawdzić wartości tych 2 zmiennych w trakcie wykonywania, nawet zwykłym printem, bo wg mnie tutaj jest problem.


Podobne wątki
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  Qgis+Postgresql - dostęp do kolumn sebaq 1 13 934 22-01-2013, 12:39
Ostatni post: sebaq
  Qgis+Postgis - współbieżny dostęp do danych sebaq 2 21 192 03-12-2012, 11:33
Ostatni post: sebaq
  Zmiana użytkownika w warstwie PostGIS Rayo 10 42 826 20-04-2010, 13:45
Ostatni post: borys

Skocz do: