Tagi na forum.

Windows 14206 SQL Server 2132
sieci 6796 Windows XP 1922
SQL 6578 Outlook 1838
SBS 3868 Uprawnienia 1777
Windows 2003 2781 IIS 1636
Windows Server 2588 Office 1516
DNS 2315 Skrypt 1499

pokaż wszystkie tagi na forum

Problem z zapytaniem SQL przez ODBC połączonym do bazy MDB

lublinkermi 2011-09-23 06:26:01
0
avatar
 
 

Dzień dobry, proszę o pomoc w rozwiązaniu problemu. Mam takie zapytanie SQL:

Delete from emaile where ZUSDRA.I_2_2OKRESDEKLAR <> '122003' and  typ_adresu<>'S';

Łączę się do bazy MDB poprzez ODBC, gdyż piszę program w Lazarusie. W odpowiedzi dostaję:

ODBC ERROR - 3010: "[Microsoft][Sterownik ODBC Microsoft Access] Za mało parametrów. Oczekiwano 1." (07002)

Dokładnie takie sam komunikat otrzymuję, gdy korzystam ze składni typu select * from .... where...

 


tagi: ODBC


marekpow  2011-09-23 07:12:26 #1
0
avatar
 
 

No to może tak:

Delete from emaile where [ZUSDRA.I_2_2OKRESDEKLAR] <> '122003' and  typ_adresu <>'S';

Marek Powichrowski

[Mój blog]

Jeśli pomogłem, kliknij + przy mojej odpowiedzi

Mixerman  2011-09-23 07:50:23 #2
0
avatar
 
 

Kasujesz z jednej tabeli, a warunek ograniczający bierzesz z innej.


lublinkermi  2011-09-24 01:35:27 #3
0
avatar
 
 

ZUSDRA.I_2_2OKRESDEKLAR i typ_adresu to są kolumny tabeli emaile....


lublinkermi  2011-09-24 02:44:36 #4
0
avatar
 
 

Ooops... przy przepisywaniu zapytania SQL na forum zrobiłem błąd, że faktycznie wskazywałem tabelę...(Pracuję na odizolowanej wirtualnej maszynie z wyłączonym schowkiem) Ale problem rozwiązałem. Okazało się, że był uszkodzony sterownik ODBC. Przy okazji zapytam się jeszcze, czy używająć ODBC mogę korzystać ze składni typu

'if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[emaile]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)drop table [dbo].[emaile]

Sterownik wypluwa mi, że chce DELETE INSERT PROCEDURE UPDATE i nic więcej.


PaSkol  2011-09-30 21:40:50 #4.1
0
avatar Ekspert WSS
 
 

Jeżeli to ODBC to nadal sterownik Accessa, to nie. Taka konstrukcja zadziała tylko na MSSQL-u, bo tylko tam istnieją takie obiekty jak sysobjects. No chyba, że stworzyłeś sobie taką tabelę w bazie Accessa (*.MDB). Tylko i tak nie możesz jej kwalifikować nazwą schematu no i nie zadziała OBJECTPROPERTY.

Jeśli to jest Lazarus (a raczej Free Pascal), to być może lepiej jest skorzystać z ADO, które to posiada odpowiednie metody (jest to zestaw obiektów COM) pozwalające określić czy są odpowiednie tabele (interfejs _Connection, metodę OpenSchema).


PaSkol
http://paskol.robi.to

lublinkermi  2011-10-01 05:51:19 #4.1.1
0
avatar
 
 

No nie do końca się zgodzę, nie znam dokładnie baz MDB, natomiast taka konstrukcja w ACCESS'ie zadziałała i było ok. Natomiast jeśli to samo zapytanie dam przez ODBC to nie działa.  Rozwiązałem to w dużo mniej elegancki sposób, bo tabelę, którą tworzę z zapytania wrzucam do bazy DBF.


PaSkol  2011-10-01 15:00:36 #4.1.1.1
0
avatar Ekspert WSS
 
 

taka konstrukcja w ACCESS'ie zadziałała i było ok

Zapewne jako kwerenda przekazująca, wywoływana pod kontrolą Accessa, ale działająca fizycznie na serwerze MSSQL. Zaraz się okaże, że łączysz się do bazy MDB, która de facto służy do łączenia z MSSQL-em. Zatem mógłbyś się przez ODBC połączyć z MSSQL bezpośrednio. I wówczas przytoczone zapytanie by działało. Ale to tylko takie moje gdybanie.


PaSkol
http://paskol.robi.to

lublinkermi  2011-10-02 03:10:37 #4.1.1.1.1
0
avatar
 
 

Oj nie wydaje mi się, choć w systemie Windows wszystko jest możliwe. Pracuję na wirtualnej maszynie, pod kontrolą linuxa. Maszyna czyli Windows XP nie ma żadnego MSDE, MS EXpress itp itd. Jest tam tylko Płatnik z jego bazą MDB. Tę bazę otwieram w Accessie i w ODBC testując zapytania SQL. Nie znam programowania biegle, a powiem więcej zaczynam na prośbę mojej znajomej księgowej i dorabiam niektóre funkcje, których nie ma w programach i twórcy programów nie zamierzają dorabiać. Sądziłem, że skoro zapytanie SQL jest poprawne czyli poprawnie wykonuje się w Accessie to i przez interfejs dostępu do danych - ODBC też wykona się poprawnie. Na linuksie tak to działa. Tu nie chce. Natomiast samo zapytanie SQL wziąłem z google i dotyczyło MDB.


PaSkol  2011-10-02 18:25:00 #4.1.1.1.1.1
0
avatar Ekspert WSS
 
 

Ta wirtualna maszyna ma dostęp do sieci? W tej sieci nie ma przypadkiem jakiego MSSQL-a? Do niego może być podłączana baza MDB.

Czy możesz dokładnie opisać jak wykonujesz to zapytanie w Accessie? Tworzysz nową kwerendę, jest to kwerenda wybierająca, wybierasz tabele z listy/przechodzisz do widoku SQL i tam wpisujesz polecenie?

A może poprawiasz istniejącą kwerendę? Czy ona przypadkiem nie ma ikonki kuli ziemskiej? I jaka to wersja Accessa?

Podaj czym nakarmiłeś Google skoro zwrócił Ci zapytanie dla MSSQL jako zapytanie dla Accessa.


PaSkol
http://paskol.robi.to

lublinkermi  2011-10-04 07:23:55 #4.1.1.1.1.1.1
0
avatar
 
 

Ta sieć jest heterogeniczna, odseparowana, ikonka nie ma widoku kuli ziemskiej, Access 2000. Google nakarmione frazą: mdb drop table if exists


prachwal  2011-10-04 11:22:15 #4.1.1.1.1.1.1.1
0
avatar
 
 

włącz RPC-OUT na połączeniu do pliku mdb

exec ('drop table emaile') at conn_do_mdb


KrzysztofJa  2011-09-26 08:57:31 #5
0
avatar
 
 

a może tak

'if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[emaile]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1) BEGIN drop table [dbo].[emaile] END


lublinkermi  2011-09-30 19:10:40 #6
0
avatar
 
 

Witam, niestety nie zadziałało. Dalej ten sam komunikat.


prachwal  2011-10-02 11:19:23 #7
0
avatar
 
 

 

emaile to tabela czy kwerenda?

 

bo jeżeli to kwerenda to trzeba podać parametr o co krzyczy ODBC


Udziel odpowiedzi

avatar
Treść wpisu:

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.

Idź na górę strony