Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / INNER JOIN при работе с DBF / 15 сообщений из 15, страница 1 из 1
12.04.2007, 14:35
    #34456199
Suzeren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
Беда вот в чем....
Есть OleDbConnection с такой строкой:
Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=dBASE IV; Data Source=C:\\Temp

Все работает замечательно до тех пор пока я не попытаюсь выполнить запрос вида:

SELECT X.USER_NICK , 3 as SUMMA
FROM XINNER JOIN
Y ON Y.ID_I = Y.ID_I INNER JOIN
Z ON Z.TOUR = Z.TOUR

Орет что не понимает X.ID_I = Y.ID_I INNER JOIN Z ON Y.TOUR = Z.TOUR

Это что же, в .NET не работают такие простые запросы??? Даже в SQLExplorer-е в Builder-е работают сто раз более наврочаные запросы!

А запрос вида:
SELECT X.USER_NICK , 3 as SUMMA
FROM XINNER JOIN
Y ON Y.ID_I = Y.ID_I
Пожалйста.... Что, выходит я могу соединить не больше 2-х таблиц в запросе?

Короче, или я идиот, или разработчикам надо сломать пальцы.... ))) Откройте истину кто-нибудь, а то уже в бешенство просто ввергло то что не могу выполнить такой простой запрос.. ((
...
Рейтинг: 0 / 0
12.04.2007, 15:10
    #34456374
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
1. скопируй запрос корректно, а то у тебя X сливается с INNER, да и условия соединения несколько странные (лучше использовать тэг SRC)
2. попробуй написать запрос без слова INNER (только JOIN)
...
Рейтинг: 0 / 0
12.04.2007, 15:26
    #34456451
Suzeren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
Это просто я тут правил названия талиц, вот и сливается....))

Написал без всякий JOIN, обычными WHERE и все заработало. Вообще интресно, что некоторые элементы не работают, на некоторые, такие как UNION ALL напротив, работают.
...
Рейтинг: 0 / 0
12.04.2007, 15:42
    #34456512
tru55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
Ох-х-х...
Например, в Oracle поддержка ANSI SQL (в области JOIN) появилась только в 9 (до этого соединение таблиц было только через WHERE). Дык до сих пор (даже в 10) в нем полно глюков, поэтому большинство до сих пор обходится "родным" синтаксисом Oracle...
...
Рейтинг: 0 / 0
12.04.2007, 19:00
    #34457338
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
Во блин... джойны ... запросы к дбф... ну ни зя... Кто вообще сказал что можно?!
...
Рейтинг: 0 / 0
13.04.2007, 08:26
    #34457994
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
buser
джойны ... запросы к дбф... ну ни зя... Кто вообще сказал что можно?!

А где написано, что низзя? По неосведомленности работаем же...

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
13.04.2007, 09:47
    #34458186
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
:)) Хорошо - ни низя... Может фоксовый провайдер поддерживает JOIN'ы? Попробуйте...
...
Рейтинг: 0 / 0
13.04.2007, 11:27
    #34458600
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
buser
Попробуйте...

Гм... Действительно... На
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
m.*,
d_l_I.*,
d_l_II.*
from
master m
left outer join det_l_I d_l_I on (d_l_I.Master_ID=m.ID)
left outer join det_l_II d_l_II on (d_l_II.Master_ID=m.ID) and (d_l_II.det_l_I_ID=d_l_I.ID)
order by m.ID, d_l_I.ID, d_l_II.ID
Microsoft.Jet.OLEDB.4.0
Syntax error (missing operator) in query expression '(d_l_I.Master_ID=m.ID)\r\nleft outer join det_l_II d_l_II on (d_l_II.Master_ID=m.ID) and (d_l_II.det_l_I_ID=d_l_I.ID)'.

На
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
m.*,
d_l_I.*,
d_l_II.*
from
master m
join det_l_I d_l_I on (d_l_I.Master_ID=m.ID)
join det_l_II d_l_II on (d_l_II.Master_ID=m.ID) and (d_l_II.det_l_I_ID=d_l_I.ID)
order by m.ID, d_l_I.ID, d_l_II.ID
Microsoft.Jet.OLEDB.4.0
Syntax error in FROM clause.

vfpoledb все это переварил
без напряга... Беру свои слова обратно... Вернее - уточняем:
buser
джойны ... запросы к дбф... ну ни зя... Кто вообще сказал что можно?!

относиться только к Microsoft.Jet.OLEDB.4.0

P.S. А борманский Database Desktop тоже накосячил:
на
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
m.*,
d_l_I.*,
d_l_II.*
from
"e:\fpd26\dbf\master.dbf" m
left outer join "e:\fpd26\dbf\det_l_I.dbf" d_l_I on (d_l_I.Master_ID=m.ID)
left outer join "e:\fpd26\dbf\det_l_II.dbf" d_l_II on (d_l_II.Master_ID=m.ID) and (d_l_II.det_l_I_ID=d_l_I.ID)
order by m.ID, d_l_I.ID, d_l_II.ID
и
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select
m.*,
d_l_I.*,
d_l_II.*
from
"e:\fpd26\dbf\master.dbf" m
left outer join "e:\fpd26\dbf\det_l_I.dbf" d_l_I on (d_l_I.Master_ID=m.ID)
left outer join "e:\fpd26\dbf\det_l_II.dbf" d_l_II on (d_l_II.Master_ID=d_l_I.Master_ID) and (d_l_II.det_l_I_ID=d_l_I.ID)
order by m.ID, d_l_I.ID, d_l_II.ID
выдал разные результаты

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
20.04.2007, 10:57
    #34475203
Suzeren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
Без JOIN-ов тяжко.. Один и тот же запрос с ними выполняется на порядок быстрее чем без них.
Это относится как к Борландовскому SQL Explorer-у так и к JET. (((

Вообще разница колосальная в драйверах. Итог - перевел прогу на SQL 2000 - то что работало под JET перестало работать. Универсальность OleDB в .NET отсутствует напроч. То что проходит под SqlConnection и иже сним классы, напрочь отказывается работать с OleDbConnetion.

Может я тупой, но уже хочется покалечить разработчиков. ))

Например такая строка: delete * from XXX (where id_i = 3) - запросто рабоатет под JET. Под SQLOLEDB - посылает нахер со словами "incorrect syntax near '*' " ((

Так же, вот такой код:
insert into Result(tour,K1,K2,S1,S2) values (@tour,trim(@KD1),trim(@KD2),@SD1,@SG1)

с вот таким заполнением:

.......

param[0] = new OleDbParameter("@tour", Convert.ToInt32(NTour.Text));
param[1] = new OleDbParameter("@K1", KD4.Text);
param[2] = new OleDbParameter("@K2", KG4.Text);
param[3] = new OleDbParameter("@S1", Convert.ToInt32(SD4.Text));
param[4] = new OleDbParameter("@S2", Convert.ToInt32(SG4.Text));
.......
if (p_pr != null)
{
for (int i = 0; i < p_pr.Length; i++)
{
m_cmd.Parameters.Add(p_pr );
}
}
Запросто работает под JET и SqlConnectin, но под SQLOLEDB - посылает на х...елп. (((
Хотя при отладке видно что параметры заполнились, что все вроде с виду ОК.
...
Рейтинг: 0 / 0
20.04.2007, 12:17
    #34475583
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
Suzeren
delete * from XXX (where id_i = 3)

звездец
( * )
это ж, каж-ся, клетворная мелкософтовская экзотика
По крайней мере, в стандарте я такого синтаксиса не встречал.
Suzeren
param[0] = new OleDbParameter("@tour", Convert.ToInt32(NTour.Text));

попробуйте вместо
public OleDbParameter(string, object);
заюзать
public OleDbParameter(string, OleDbType);
Suzeren
но под SQLOLEDB - посылает

какими словами?
Приведите текст выдаваемого сообщения.
_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
20.04.2007, 12:30
    #34475627
Suzeren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
Да-да-да... с экзотикой разобрался, виноват.

Решил плюнуть на этот JET, ибо тормозит страаашно просто. Решил делать ерез фоксовский драйвер. Теперь проблема такая.... я уж и так, и этак, и через параметры и просто строкой, пытаюсь сделать такое:

insert = "insert into Result(tour,K1,K2,S1,S2) values (15,'GGG','AAA',0,0)";

OleDbCommand newc = new OleDbCommand(insert,ODBC);
ODBC.Open();
newc.ExecuteNonQuery();
ODBC.Close();

ругается следующим: Command contains unrecognized pharse/keyword...

Я вообще в Фоксе никогда ниего не делал... там что, как-то по другому надо?
...
Рейтинг: 0 / 0
20.04.2007, 12:57
    #34475747
Suzeren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
Фррр... разобрался )) Все, сегдня больше не буду ничего спрашивать ))) Пятница, видимо совсем потерял такое качество как внимание )))
...
Рейтинг: 0 / 0
20.04.2007, 14:00
    #34476003
Ex_Soft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
cmd.CommandText="insert into DbfTable (FInt, FChar) values (1, 'Line# 1')";
cmd.ExecuteNonQuery();

cmd.CommandText="insert into DbfTable (FInt, FChar) values (?, ?)";
cmd.Parameters.Clear();
cmd.Parameters.Add("FInt",OleDbType.Integer).Value= 2 ;
cmd.Parameters.Add("FChar",OleDbType.VarChar).Value="Line# 2";
cmd.ExecuteNonQuery();
шо под
Код: plaintext
1.
strConn="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=e:\\fpd26\\dbf;Extended Properties=dBASE IV;User ID=;Password=";
шо под
Код: plaintext
1.
strConn="Provider=vfpoledb.1;Data Source=e:\\fpd26\\dbf\\";
как дети в школу

_________________
"Helo, word!" - 17 errors 56 warnings
...
Рейтинг: 0 / 0
20.04.2007, 14:50
    #34476267
Suzeren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
А где ты в моем коде '?' увидал в параметризированом запросе? )) Я спрашивал про конкретный вариант кода.
...
Рейтинг: 0 / 0
20.04.2007, 14:52
    #34476275
Suzeren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
INNER JOIN при работе с DBF
Который выглядел вот так:

inser into XXX(a,b,c) values (@a,@b,@c)

а потом в него параметры добавлялись. Интересовало почему такое JET жует а Fox нет ))
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / INNER JOIN при работе с DBF / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]