Proste dodanie rekordu pętlą do bazy

0

Tak dla zabicia czasu zaczynam poznawać sql i próbuję dodać kilka rekordów do bazy za pomocą takiej pętli.
Mam oczywiście na formie memo z dodanymi 10 liniami.

for i:=0 to memo1.lines.count-1 do
begin
cmdline:='insert into pracownicy (imie) values (memo1.lines[i])';
sqlconnection1.executedirect(cmdline);
end;

Problem leży oczywiście w tym fragmencie:
... values (memo1.lines[i])';

Pomożecie?

0
cmdline := 'INSERT INTO pracownicy (imie) VALUES ("'+memo1.lines[i]+'")';

Btw, cmdline to mało adekwatna nazwa dla tej zmiennej.

1
cmdline := 'INSERT INTO pracownicy (imie) VALUES ("'+EscapeSpecChars(memo1.lines[i])+'")';
0

Błąd w trakcie kompilacji kodu Patryk27: E2010 Incompatible types: 'string' and 'PAnsiChar'.

0

Przy małych projektach spoko, ale z doświadczenia wiem, że nie jest to do końca dobre rozwiązanie. Insertując po rekordzie, n razy prosimy silnik bazy o przydzielenie grantów , otwarcie i zamknięcie transakcji. Np. przy bazie firebird, miałem problemy właśnie z czasem robienia insertów przy ok 20 000 insertów. Z tego powodu składałem "paczkę insertów" i za jednym razem je wysyłałem, czyli raz otwieram transakcje, raz otrzymuje granty i raz commituje. Co prawda nie było to 20 000 insertów w jednej transakcji, ale zrobiłem to konfigurowalne, od konfiga który określał wielkość paczki.

0

Ok będę o tym pamiętał, a podpowie ktoś co poprawić, żeby przy kompilacji nie powstawał ww błąd? (E2010 Incompatible types: 'string' and 'PAnsiChar')

0
PChar(RzutowanieNaStringBoTrzebeNajpierwGooglowacDoBooluOrazKombinowacSamodzielnieDopieroPozniejPytacNaJakimKolwiekForum);
0

Pchar pomogło. Dzięki.

0

Gdybyście jeszcze koledzy podpowiedzieli jak wyświetlić zawartość powiedzmy tylko kolumny ID np w memo. byłbym wdzięczny. Polecenie sql znam, ale jak te dane pobrać do memo?

0

poprzedni post poszedł bez zalogowania do forum :)))

memo.lines.add(inttostr(dataset.fieldbyname('id').asinteger))

albo

memo.lines.add(dataset.fieldbyname('id').asstring)

nie wiem jakich komponentów bazodanowych używasz
w DBXpress mogło by to wygladać tak

tsql.commandtext:=znana komenda sql;
tsql.open;
if not tsql.isempty then
    while not tsql.eof do 
        begin
             memo.lines.add(inttostr(dataset.fieldbyname('id').asinteger));
             tsql.next;
        end;

gdzie tsql jest typu Tsqldataset

0

Mam na formie sqlconnetion1, sqldataset1, które w properties pozycję sqlconnection ma ustawione na sqlconnection1. Do dopisywania rekordów do bazy, ich edytowania i usuwania te komponenty wystarczają. Do wyświetlania zawartości bazy w memo już nie.

Próbowałem np tak:

cmdline:='select (imie) from pracownicy';
sqlconnection1.Executedirect(cmdline);
memo2.lines.add(sqldataset1.FieldByName('imie').asstring);

Błąd: sqldataset1 field imie not found

Próbowałem też tak:

sqldataset1.CommandText:='select (imie) from pracownicy';
sqldataset1.open;
memo2.lines.add(sqldataset1.FieldByName('imie').asstring);
sqldataset1.close;

Błąd: Access violation at address 00C9E258 in module dbxmys30.dll

Szukam po forach zanim tu zapytam, ciężko mi coś znaleźć. Próbuję więc sam pisać, jak widać z marnym skutkiem. Może jeszcze coś powinienem dołożyć na formę? Delphi 2007.
Jeśli mogę prosić, wyłóżcie mi to jak ciołkowi, krok po kroku. Kiedyś miałem bde w małym palcu, ale sql to już inna bajka i dopiero się rozkręcam. Proszę o wyrozumiałość.

0

Poprzez Execute nie działa ponieważ to tylko dla nic nie zwracających komend, np insert, update, etc
Powinno zadziałać to:

sqldataset1.CommandText:='select imie from pracownicy';
sqldataset1.open;
memo2.lines.add(sqldataset1.FieldByName('imie').asstring);
sqldataset1.close;
0

Też sądziłem, że to zadziała, ale wywala błąd

Access violation at address 00C9E258 in module dbxmys30.dll
Czyżby coś z dbxmys30.dll było nie tak? Spróbuję podmienić.

dodanie znacznika <code> - @furious programming

0

Podmieniłem plik dbxmys30.dll na nowszy znaleziony w sieci. Dodawanie, usuwanie, edytowanie rekordów w bazie działa, natomiast po wywołaniu tego:

sqldataset1.CommandText:='select imie from pracownicy';
sqldataset1.open;
memo2.lines.add(sqldataset1.FieldByName('imie').asstring);
sqldataset1.close;

pojawia mi się taki komunikat:
Link do zrzutu ekranu info.JPG

0

Ręce już mi opadają. Walczę z tym od wczoraj, podmieniam pliki i ciągle to samo. Może ktoś jednak spotkał się z podobnym problemem?

0

Wygląda to na twardą spacje wsadzoną w środek zapytania lub na przykład rosyjska o w słowie from. Weź skasuj całe zapytanie pomiędzy znakami := a ; po czym wpisz od nowa.

0

D..a blada kolego, nie pomogło. Wydawało mi się, że problem jest w tym, że ten plik dbxmys30.dll nie jest kompatybilny z moją wersją mysql (5.5.21), więc zainstalowałem mysql 4 i też kicha. Podmieniałem też plik libmysql.dll na różne jego wersje i nic. Dodawać, edytować, usuwać rekordy mogę bez problemu, ale jak już chcę je wyświetlić w memo to wywala ten błąd.

0

znów się nie zalogowałem i zostałem "Pijanym Terrorystą" :)))

po zalogowaniu ponawiam wypowiedź :

jakich komponentów bazodanowych używasz i jaka jest wersja bazy danych ?? sądząc z treści Twoich notek to DBXpress

0

Dokładnie tak. Zainstalowany WebServ, wersja mysql to 5.5.21.

0

a wersja MySql ? pewnie 5.xxxx

0

i D2007 ???

0

5.5.21, ale zainstalowałem też mysql v. 4.0 i problem nie zniknął.

Delphi 2007, CodeGear.

0

ja działam na D2010 i DBXpress, miałem mnóstwo problemów z MySql w wersji 5.xxx , po zmianie komponentów bazodanowych na ZeosLib problemy w działaniu aplikacji zniknęły , pozostały dziwne problem z samym środowiskiem programistycznym , ale z tym sobie jakoś radzę . Myślę że Twoje problemy wynikają z błędów tkwiących obsłudze MYSql przez DBXpress 2007

0

Też tak myślę, dlatego zainstalowałem zeos. Manual przeczytany, paczka zainstalowana, komponenty są, dodałem dla testu na formę komponent Zconnection1, kompiluję i co? Komunikat o braku pliku DBconst.dcu. Przeszukałem cały twardy dysk z nadzieją, że gdzieś ten plik się schował i trzeba go będzie przekopiować, ale okazuje się, że nie mam takiego pliku. Tracę siły już.

0

zrób Builda aplikacji

0

Podczas builda pojawia się ten błąd:
[DCC Error] ZAbstractRODataset.pas(483): F1026 File not found: 'DBConst.dcu'

0

próbowałeś znaleźć plik DBconst.pas ?
może masz źle ustawione ścieżki do folderu z komponentem Zeos

0

Nie ma na całym dysku pliku DBconst.pas ani DBconst.dcu.

0

masz pewnie niekompletną instalację Delphi , u mnie taki plik jest zarówno w D2007 jak i D2010

0

grzegorz_so wysłałem ci PW. Pomożesz?

1 użytkowników online, w tym zalogowanych: 0, gości: 1