Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Delphi] błąd operacji na bazie danych

02 Lip 2011 02:37 3346 10
  • Poziom 32  
    Witam

    Mam następujący problem mam dwa przyciski i kiedy niema w nich kawałka kodu

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    Wystęuje błąd odnośnie SQLQery1

    Kod: select_listing
    Zaloguj się, aby zobaczyć kod


    kod wygląda następująco

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    Już nie wiem o co może chodzić
  • Pomocny post
    Moderator Programowanie
    Błąd, który się pokazuje, jest generowany wówczas, gdy za pomocą SQLQuery1.Open; starasz się uruchomić komendą SQL inną niż "SELECT ...".
    A po co dajesz komendę SQLQuery1.Open; na starcie ?
    Musisz pamiętać, że SQLQuery1.Open; uruchomi tylko zapytanie typu "SELECT..." natomiast SQLQuery1.ExecSQL; wszystkie inne.
    Poza tym, nie zamykasz SQLQuery1, przed zmianą zawartości komendy SQL.
  • Poziom 32  
    Jak zwykle można na kolegę liczyć :)
    Kod w takiej postaci działa bardzo dobrze :D

    Kod: delphi
    Zaloguj się, aby zobaczyć kod



    Mam jeszcze pytanie odnosnie - być może, kodowania znaków

    Moim typem danej na której chce operować w bazie jest Blob pobieram ją do stringa i otrzymuje w miejscu polskich znaków pytajniki i nie wiem w czym rzecz kiedy wyświetlam stringa w funkcji SchowMessage mam pytajniki a kiedy wrzucam do Memo polskie znaki zamieniają się na kwadraciki kodowanie w bazie ustawione jest na utf8_general_ci

    Kod wygląda następująco

    Kod: delphi
    Zaloguj się, aby zobaczyć kod


    Czy jakoś poprzez zapytanie da się zmienić kodowanie jednego rekordu i później wrócić do poprzedniego, oczywiście mając wszystkie prawa do tabeli :?:

    Znalazłem tylko coś takiego bo chciałbym zmienić kodowanie pobrać bloba i przywrócić kodowanie

    Kod: sql
    Zaloguj się, aby zobaczyć kod


    Jako tak nie zależało by mi na tym bo i tak będę wykonywał operacje na łańcuchu (z bloba) nigdzie nie uwzględniając polskich liter ale chciałem wczytywać to do Memo

    Pozdrawiam
  • Pomocny post
    Moderator Programowanie
    Jakoś nigdy nie potrzebowałem robić czegoś takiego.
    Jeżeli potrzebuję zapisać do BLOB-a jakąś informację, zawierającą jakiekolwiek znaki narodowe, to zapisują ją w formacie RTF. Zapisujesz to poprzez strumień bezpośrednio z RichTextEdit-a i pobierasz dokładnie tak samo.
    Dodatkowo, masz bonus w postaci kolorów i formatowania.
  • Poziom 32  
    Pisze to w lazarusie więc użyłem SynEdit-a

    I jest ok tak samo to wygląda jak w ShowMesage niestety pytajniki pozostają nadal

    arnoldziq napisał:
    Jeżeli potrzebuję zapisać do BLOB-a jakąś informację, zawierającą jakiekolwiek znaki narodowe, to zapisują ją w formacie RTF. Zapisujesz to poprzez strumień bezpośrednio z RichTextEdit-a i pobierasz dokładnie tak samo.


    Mogę prosić o jakiś przykład

    arnoldziq napisał:
    Dodatkowo, masz bonus w postaci kolorów i formatowania.


    Zawartość będzie kodem html więc jako tak nie było by to przydatne :)
  • Pomocny post
    Moderator Programowanie
    Utworzyłem sobie testową bazę danych :
    Kod: sql
    Zaloguj się, aby zobaczyć kod


    Utworzyłem prosty edytor z kilkoma możliwościami zmiany koloru i stylu fontu.
    Spokojnie się zorientujesz jak co działa. Kody są w Delphi 2009, ale chodzi o ideę.

    Poza tym, zauważyłem, że polskie znaki diakrytyczne zapisują się w tej bazie bez żadnych kombinacji. Nawet przy moim angielskim systemie. Wystarczy tylko ustawić kodowanie w IBDatabase na UTF8.
    Trzeba również pamiętać, że jeden polski znak w TEdit, to 2 znaki w string-u.

    [Delphi] błąd operacji na bazie danych
  • Poziom 32  
    Serdecznie dziękuję :)

    arnoldziq napisał:
    Poza tym, zauważyłem, że polskie znaki diakrytyczne zapisują się w tej bazie bez żadnych kombinacji. Nawet przy moim angielskim systemie. Wystarczy tylko ustawić kodowanie w IBDatabase na UTF8.
    Trzeba również pamiętać, że jeden polski znak w TEdit, to 2 znaki w string-u.


    1. A jak się ustawia kodowanie dla tej kontrolki :?:
    2. Jak wstawić znak podkreślonego U (tak jak na przycisku)

    Zrezygnowałem ze wczytywania tego bloba bo i tak użytkownik na stronce będzie widział jaki jest komunikat. A pod buttonem można zrobić pobranie z bazy operacje na łańcuchu i zapis.

    Czyli reasumując nie trzeba nawet tak kombinować :) a akurat lepiej mi użyć Memo bo wygodniej później robić logi do pliku - przynajmniej jak dla mnie a Edytor to już jakoś wykombinuję

    Piszę to w lazarusie dlatego że ma bardzo dobry suport do bazdanych a jak pamiętam to w delphi 2009 trzeba się nagimnastykować żeby połączyć się z MySQL-owa bazą a może nowsze delphi też już to ma :?:

    Pozdrawiam
  • Pomocny post
    Moderator Programowanie
    1. Wystarczy dwukrotnie kliknąć na kontrolce IBDatabase i zmienić ustawienia w tym oknie :
    [Delphi] błąd operacji na bazie danych
    2. Styl (pogrubienie, pochylenie, podkreślenie itd.) można ustawić we właściwościach font, danego obiektu :
    [Delphi] błąd operacji na bazie danych
  • Poziom 32  
    Wielkie dzięki u mnie kodowanie zmieniam bezpośrednio w kontrolce wpisując z palca kodowanie


    Znalazłem odpowiednik RichEdita do lazarusa i go stosuję, ale na razie zająłem się podstawowa rzeczą odczytem modyfikacją i ponownym zapisem do bazy SQL-owej

    Zmiana kodowania na UTF8 w kontrolce pomogła i odczytują się polskie znaki ale niestety nie zapisują się tzn zostają później wyświetlone jako pytajniki na stronie WWW

    Realizuję to tak

    Kod: delphi
    Zaloguj się, aby zobaczyć kod



    Czyszczenie zawartości pól wprowadziłem bo w pewnych momentach zaczęły dane się nadpisywać

    W pewnej konfiguracji moje zapytanie popsuło całą bazę i MySQL nie mógł się uruchomić na XAAMP-ie :)

    Obecne dzieją się dziwne rzeczy czyżby konwersja do RTF-a i zapis był jedynym rozwiązaniem :?:
  • Moderator Programowanie
    A mi się wydaje, ze coś namieszałeś przy wyświetlaniu tych danych. Skoro zapisujesz ciąg znaków jako UTF8, to na dowolnej stronie, na dowolnej przeglądarce, która wspiera ten standard, znaki mają obowiązek być wyświetlane w ten sposób.
    Może strona jest wyświetlana w jakimś innym formacie kodowania ?
    Albo font którego używasz nie ma "wbudowanych" polskich znaków ?
  • Poziom 32  
    Rozwiązanie okazało się proste aczkolwiek nie za zrozumiałem

    Wszystko w bazie było kodowane w UTF-8 w kontrole ustawiłem też takie kodowanie lecz nie dawało to rezultatów nawet zapis ze strumienia nie zmienieł tego aczkolwiek zaczęło mieć dzięki temu ręce i nogi i nauczyłem się czegoś nowego :)

    Zacząłem kombinować i okazało się że przed operacjami na bazie trzeba jeszcze raz jej "przypomnieć" że posiada kodowanie UTF-8 i trzeba to robić za każdym razem kiedy chce się zapisać polskie znaki

    Oto kod ładowanie ze strumienia zapytanie i kodowanie oraz zmiana zawartości kod przerobiony do Lazarusa.


    Kod: delphi
    Zaloguj się, aby zobaczyć kod



    Pozdrawiam i dziękuję