Wypowiedzi
-
Rozwiązałem.
To jednak wadliwy sterownik MySql-Connect 5.1 ... był.
Zainstalowałem 5.2 (nowszy się zbuntował, bo nie miał biblioteki ANSI - dlaczego? Czort wie) i wszystko działa OK ... -
Witam
Mam bazę MySql na zewnętrznym serwerze. Na kompie - baza w Access'ie 2003. I teraz problem:
W bazie na kompie mam kilka (wcześniej utworzonych na innym kompie) tabel połączonych z tabelami tej bazy MySql - wszystko działa ok, ALE:
Jak próbuję stworzyć NOWE połączenie z tabelą w bazie MySql - Access wywala się, jeśli NAZWA tabeli w MySql jest dłuższa niż 16 znaków. Z tabelami o KRÓTSZYCH nazwach łączy się bez problemu.
Dziwi mnie to tym bardziej, że WCZEŚNIEJ UTWORZONE połączenia z tabelami o nazwach dłuższych niż te 16 znaków działają bez problemu ...
Zonk jest tylko przy tworzeniu NOWEGO połączenia : Plik->Pobierz dane zewnętrzne->Połącz tabele->wybór pliki typu->wybór Bazy danych ODBC->wskazuję bazę->wskazuję tabelę->klikam OK i ... zonk
Dodam, że:
1 - nie używam polskich znaków w nazwach obiektów (tabel, formularzy, zmiennych e.t.c)
2 - Zrobiłem prosty test. Stworzyłem testową tabelę MySql o nazwie "testowa-A" na tym serwerze i sprawdzałem "łączliwość" z tą tabelą zmieniając nazwę kolejno "testowa-AA", "testowa-AAA" i.t.d. Wywaliło się, gdy nazwa przekroczyła 16 znaków ...
Co za to odpowiada i jak to zmienić? -
Mam na serwerze bazę MySql z kilkoma tabelami Tab1 ... Tabn
Na komputerze mam bazę Access 2003, która wykorzystuje połączenie ODBC z tymi tabelami.
I teraz coś, czego NIE ROZUMIEM:
Jak na kompie A (na którym ta baza została "stworzona") i B (na którym korygowałem tą bazę .mdb) chcę
dołączyć tabele z MySql (Plik->pobierz dane zewnętrzne->Połącz tabele ... i.t.d. wskażę tabele - bez problemu powstaje połączenie.
ALE
jak na kompie C (ten sam system - XP) i D (Win 7) chcę to samo zrobić - klapa.
Mogę połączyć tylko 3 (zawsze te same) tabele. Przy próbie połączenia pozostałych system wywala Access'a - Sygnatura błędu:
EventType : BEX P1 : MSACCESS.EXE P2 : 11.0.5614.0 P3 : 3f3c8e3c
P4 : myodbc5.dll P5 : 5.1.11.0 P6 : 4f9b1ae8 P7 : 00004872
P8 : c0000409 P9 : 00000000
Jak skopiuję bazę .mdb z kompa A, czy B na te pozostałe kompy (z "wczytanymi" połączeniami do tabel MySql) - wszystko działa - można wpisywać, usuwać dane e.t.c.
Jednak jakakolwiek próba "odświeżenia/aktualizacji" takiego połączenia przez utworzenie nowego łącza (Plik-> ... i.t.d.) do tych tabel powoduje wywalenie się wszystkiego na tych samych tabelach.
Na każdym kompie robię to z uprawnień administratora (przynajmniej tak informuje system).
Tabele są do siebie podobne = mają podobną strukturę, założony klucz podstawowy identyfikatora i.t.p.
User komputera B ma takie same uprawnienia dostępu do bazy MySql jak userzy C i D.
Dlaczego na A iB działa to bez problemu, a na C i D łączy zawsze TYLKO z tymi 3 tabelami?
Gdzie przyczyna?
Oczywiście mogę to "ominąć" transportując "gotowce" na te kompy, ale wolałbym wiedzieć kie licho się zalęgło ... -
Z tym sprawdzeniem "dostępności połączenia tabeli" to sobie poradziłem (też banalnie), ale nadal nie wiem CZEMU Bs.RefreshLink przestawia tabelę na "tylko do odczytu" akurat w tych tabelach, a w kilku innych (ten sam serwer, też MySql, też ODBC i nawet TA SAMA baza MySql tylko inne tabele) nie ...
-
Mam na zewnętrznym serwerze tabelę "MyTabela", połączoną z tabelą w Accessie na moim komputerze.
Jak z poziomu vba sprawdzić, czy w danej chwili połączenie istnieje?
Zrobiłem najprościej:
Dim Bs As Object
Set Bs = CurrentDb.TableDefs
On Error GoTo Byk
Bs("MyTabela").RefreshLink
---
---
Exit Function
Byk:
---
---
End Function
Przy błędzie wykonuje alternatywne polecenia, ALE okazuje się, że Bs("MyTabela").RefreshLink przekształca na stałe tą tabelę "na moim kompie" w "tylko do odczytu" i za diabła nie wiem jak z poziomu vba przywrócić jej możliwość wpisywania.
Jak w takim razie sprawdzić (bez wpisywania niczego do "zewnętrznej tabeli"), czy w danym momencie połączenie z nią istnieje, czy nie?
Tabela na serwerze - MySql
Połączenie - ODBC -
Wydaje mi się, że w tym przypadku to "przerost formy nad treścią byłby" Skoro już sobie z tym przekazem poradziłem ... A w tym przypadku musiałbym przepisać procedury, bo - na pierwszy rzut oka - MSSQL wymaga poleceń SQL, a ja część poleceń robię w DAO ... e.t.c.
Wystarczy, że te bazy i tak posiłkują się bazą pośredniczącą MySql przez ODBC ... Jak na mnie to i tak "odkrywcze" było ... W końcu nie jestem informatykiem, tylko - jak w podpisie - klezmerem ...;) Opanowanie Access'a i vba zajęło mi circa 2 lata, fakt, że "samouctwa w wolnych chwilach", ale jednak ...
Pozdrawiam
Robert -
Baza Front end (Baza A) jest zbyt duża, żeby zrobić z niej .mde, a w kodzie musiałem umieścić pewne zabezpieczenie przed używaniem jej wbrew mojej woli. Założyłem, że "średnio sprytny" user może znaleźć to zabezpieczenie i usunąć bądź ominąć. Natomiast nie będzie mu się chciało analizować całego kodu modułów. Więc zrobiłem kilka odwołań do procedur w jednej z 2 baz "Back-end" (BazaB), która jest .mde (oczywiście tych, które nie wpływają w widoczny sposób na szybkość działania bazy = są wykonywane np. tylko raz przy otwarciu), a jedna z tych procedur powoduje destrukcję całej bazy i danych. Jednak konieczne było zlokalizowanie plików tych baz na kompie usera, a to mogłem zrobić tylko wykorzystując "używanie front-endu". I do tego potrzebowałem możliwość przekazania argumentów do procedury w BazieB ...
Trochę to pokręcone może, ale powinno działać ...
Oczywiście podgląd vba "zahasłowałem", ale "na każdą zbroję znajdzie się miecz", więc ...
Zdaję sobie oczywiście sprawę z tego, że jak się za to weźmie haker, to i tak się dopcha, ale zakładam, że hakerom nie będzie się chciało grzebać w tak mało ważnej bazie ....;) -
Tak podejrzewałem ...
Poradziłem sobie "przez Władywostok", czyli stworzyłem w bazie B tabelkę, do której baza A najpierw wysyła argumenty, a potem przez DoCmd.RunMacro("MyMacro"), które ma zapisane "uruchom kod" - potrzebną mi funkcję, a ona wczytuje argumenty z tabeli, do której je wysłano. Trochę na okrągło, ale działa.
Czyli trochę tak, jak w Twoim przykładzie ..., tylko nie chodziło mi o updatowanie tabeli ... -
Mam 2 bazy danych: BazaA i BazaB. BazaB jest głównie bazą danych, BazaA - "front-end" - głównie formularze i procedury.
Czy, a jeśli tak, to jak uruchomić funkcję/procedure będącą w BazieB z poziomu np. formularza/procedury w BazieA?
DoCmd.RunMacro odpada, bo potrzebuję przekazać argument z poziomu BazyA do procedury napisanej w BazieB.
Jasne, że można by przepisać tą procedurę do BazyA, ale tego właśnie chcę uniknąć ...
Jakaś podpowiedź? -
Znalazłem przyczynę, może się komuś przyda ...
FreeMail wysyła teraz bez błędów "tworzenia nowej linii" w trybie text/plain, ALE:
ciąg znaków przed poleceniem tworzenia nowej linii NIE MOŻE kończyć się znakiem "," (przecinek). Nie wiem czemu, ale postawienie tego znaku na końcu linii (PRZED Chr(13) & Chr(10)) powoduje ignorowanie tych znaków specjalnych MIMO prawidłowego użycia znaku " zamykającego ciąg znaków String ... -
Ciągle nie mogę zmusić FreeMaila, by wysłał treść z zachowaniem przejścia do nowej linijki
Chr(13) & Chr(10).
Drań przy wysyłaniu zastępuje KAŻDY zestaw znaków sterujących z zakresu 9 do 13 zwykłą spacją Chr(32).
.strTransferEncoding = "8bit"
.strCharset = "windows-1250"
.strContentType = "Text/plain"
Przecież z TEGO wynika, że ten zestaw znaków powinien być normalnie "używalny", a k.... nie jest, albo - czort wie czemu - FreeMail jest jakoś wewnętrznie zazbrojony przeciw akurat tym znakom.
Miał ktoś z czymś takim do czynienia?
Próbowałem opcjonalnie z quoted-printable zamiast 8bit, oraz z UTF-8 i iso-88...-2 zamiast tego win 1250 i guzik. Albo nie wysyła tekstu w "widzialnej" formie, albo nadal ignoruje dokładnie TE 5 znaków.. Da się to jakoś obejść/zrobić?Ten post został edytowany przez Autora dnia 07.01.15 o godzinie 01:18 -
Dzięki za podpowiedź.
Niestety "</br>" nie działa ... W odbiorze pokazuje właśnie </br>, he, he ...
Z ustawień FreeMaila:
strBody As String 'Tekst wiadomości
strContentType As String 'text/plain (domyślnie), text/html
strCharset As String 'Strona kodowa wiadomości
'windows-1251 (domyślnie)
'koi8-r itd.
strTransferEncoding As String 'Kodowanie wiadomości
'8bit (domyślnie)
'base64, quoted-printable
Znalazłem Tu jakiś opis, ale wychodzi mi, że Chr(13) (CARRIAGE RETURN) będzie nadal Chr(13). Analogicznie Chr(10) ...
Jeśli dobrze interpretuję ustawienia FreeMaila, to nie zmieniłem kodowania. Może trzeba by je zmienić, tylko JAK?
Albo gdzieś znaleźć odpowiedniki znaków Chr(13) i Chr(10) dla windows-1251, tylko GDZIE?
Pozdrawiam
Robert -
Może to tylko kwestia błędnego sformułowania kryterium w DLookUp - brak ""?
IIf([klient]=PRAWDA; [Imię]; DLookUp("[Imię]"; "[Lista]"; "[numer klienta glownego]=" & Formularze![Lista]![numer klienta glownego]))
Jeśli wartość [numer klienta glownego] jest liczbą, doradzam - na wszelki wypadek - użyć CLng(Formularze![Lista]![numer klienta glownego]). Jeśli jest string - nie zapomnij o apostrofie ', czyli
DLookUp("[Imię]"; "[Lista]"; "[numer klienta glownego]= '" & CStr(Formularze![Lista]![numer klienta glownego]) & "'") -
Mam zagwozdkę. Wysyłam maila z Access'a via FreeMail. Chcę, by tekst wyświetlany przez odbiorcę był w kilku linijkach, więc w kodzie daję "wymuszenie przejścia do nowego wiersza" (Chr(13) & Chr(10)).
Np.
Tekst = Tekst1 & (Chr(13) & Chr(10) & Tekst2
Sęk w tym, że - gdy korzystam z FreeMail - takie polecenie przejścia do nowej linijki jest ignorowane i tekst u odbiorcy jest w jednym ciągu. Gdy korzystałem z MSOutlook - format tekstu był zachowany.
Jak wymusić takie przejście do nowej linii dla FreeMail'a? -
Czy można (a jeśli tak, to jak) "zautomatyzować" znajdowanie adresu biblioteki .DLL?
Mam funkcję:
Option Compare Database
Option Explicit
Declare Function NazwaFunkcji Lib "biblioteka.DLL" .....
Oczywiście, domyślnie program szuka tej biblioteki w system32, ale chcę, użył biblioteki umieszczonej w dowolnym miejscu (D:\...\...\biblioteka.DLL).
Potrafię napisać sobie procedurę wyszukującą ten plik, ale nie wiem JAK zrobić, by wynik takiej procedury - zmienna PathDoDLL - był odczytywany przez tą funkcję.
Innymi słowy chcę zastąpić
Declare Function NazwaFunkcji Lib "biblioteka.DLL" .....
przez
Declare Function NazwaFunkcji Lib PathDoDLL .....
gdzie zmienna PathDoDLL będzie AKTUALNYM adresem tej biblioteki,
tylko, że tak prosto to się nie da.
Jakaś podpowiedź? -
Może tak?
Dim MF As Control
Set MF = Me("Nazwa_Pola_w_którym_jest_podformularz")
MF.Form.RecordSource = "Nazwa_kwerendy/tabeli_źródłowej_dla_podformularza"
Umieszczasz to PO procedurze wpisującej nowe dane do podformularza.