Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SQL запрос [D5, Access]


Страницы:   1 2 3

juster ©   (2002-08-24 11:31:00) 

Доброго всем дня.
Такай trouble: делаю из программы запрос:
select Field1, Field2, Field3 from table1, table2 where ...
в базе Access из нескольких таблиц.
Все работает. Добавляю GROUP BY Field2 - возникает ошибка:
you tried to execute a query that does not include the specified expression Field1(первое поле указанное в запросе) as part of ann aggregate function
По русски говоря Access хочет чтобы было
GROUP BY Field1, Field2, Field3, но это же мне не надо это же просто результат без дублируемых записей, которых у меня заведомо нет. Кстати, такой же запрос на такой же базе данных работает безукоризненно в MYSQL. Что делать, может перейти на другой движок вместо Access, посоветуйте на какой, что без troube


juster   (2002-08-29 12:30:00) [1]

то ЮЮ
Для твоей проблемы предлагаю 2 варианта:
Создание алиаса
1.
a. Закрываешь Дельфу с проектом если она открыта.
б. Запускаешь odbcad32.exe
в. Делаешь DSN на базе Microsoft Access Driver (*.mdb)
г. Здесь можно остановиться, при следующем запуске bdeadmin
твой odbc DSN bde подхватит как свой алиас.
2. С шага г в 1
а. В bde admin зайди на вкладку configuration+drivers+odbc
и создай новый драйвер на базе твоего odbc DSN
б. Перейди на вкладку Databases и создай новый алиас в качестве
драйвера выбирай только что созданный в а
в. Заполни все поля database, name user name и т. д.
Запусти дельфу с проектом, в TDatabase попробуй законектиться,
если не получается, пропиши в параметрах
USERNAME=yourlogin
PASSWORD=yourpassword
свойство
LoginPrompt в false
Если тебе удалось законектиться в дезайн тайм, а в рантайм ошибка - значит на момент обращения компонент владеющий DataBase не создан, посмотри последовательность создания и уничтожения компонентов

Все сделаешь правильно - будет работать 100%


Alex Y   (2002-08-29 08:06:00) [2]

Тогда попробуй драйвер Microsoft Access Driver (*.mdb)
У меня он тоже работает.

А вообще лучше ADO использовать там даже запосы с агрегатными функциями редактируемые :)


ЮЮ   (2002-08-29 07:56:00) [3]

Cделал всё с нуля, результат тот же :-(


Alex Y   (2002-08-29 07:35:00) [4]

Тогда должно работать.

1. Заходишь в BDE Admin и срубаешь свой Alias
2. Заходишь в ODBC Admin
3. На вкладке User DNS - Add - Driver do Mivrosoft Access (*.mdb)
4. Вводишь имя источника данных
5. Нажимаешь выбрать и указываешь свой файл Access

Все.

У меня так работает без проблем.


ЮЮ   (2002-08-29 07:27:00) [5]

select * from Тур - это всё :-)


Alex Y   (2002-08-29 07:15:00) [6]

Опиши запрос. Если в нем есть агрегатные функции то так и должнобыть и редактировать его не получится


ЮЮ   (2002-08-29 07:11:00) [7]

Если у запроса RequestLive=False, то он открывается, а если True,
то General SQL error.Слишком мало параметров. Требуется 1.


Alex Y   (2002-08-29 06:01:00) [8]

procedure TForm1.Button1Click(Sender: TObject);
var db : tDatabase;
begin
db := tDatabase.Create(nil);
db.AliasName := "AccessAlias"; // Создается в ODBC Manager (не в BDE !!!)
db.DatabaseName := "asd";
db.LoginPrompt := False;
with tQuery.Create(nil) do
begin
DatabaseName := db.DatabaseName;
RequestLive := True;
SQL.Add("Select * From MyTable");
Open;
First;
Edit;
FieldByName("f1").AsString := "2";
Post;
Close;
Free;
end;
db.Close;
db.Free;
end;


juster   (2002-08-28 14:09:00) [9]

К ЮЮ.
Это что-то не то, че-то ты там намутил.
Сделай так:
не создавай алиас в BDE, создай в ODBC DSN, BDE его сам подхватит.
После этого можешь делать то же самое и LoginPromt в false - может из за этого. Еще можно попробовать в TDataBase.Params задать. Пиши подробней, сколько с базами не работал, никогда такого не было.


Alex Y   (2002-08-28 13:36:00) [10]

Не знаю в 97 Access-е будет работать или нет, но в 2000:

Select top 1 f1,f2,f3 From q Group By f2,f1,f3

А насчет редактирования, если простой запрос то с редактирование нет проблем как в ADO, так и в BDE. Если же используешь Group, то только ReadOnly.


ЮЮ   (2002-08-28 13:19:00) [11]

А чего спрашивать?
1)В BDE Admine создаю алиас, тип Microsoft Access Driver (*.mdb)
Указываю DataBase Name.
Подключаюсь: Invalid configuration parameter.
2) Создаю DNS
Редактирую алиас, указывая DNS
3) Кладем DataBase. Подключаемся.OK.
Кладем Query,DataSource,DBGrid - Подключаем, в Design - OK
Запускаем - General SQL error.Слишком мало параметров. Требуется 1.
Кому требуется. После отключения Query в Design - та же ошибка и в Design


juster   (2002-08-28 12:59:00) [12]

может помогу тебе, спрашивай.


juster   (2002-08-28 12:57:00) [13]

Настройки может быть, но когда уже знаешь - подключаешься как по маслу даже в runtime. И насколько я знаю ADO работает медленне чем SQL Links


ЮЮ   (2002-08-28 12:47:00) [14]

А через BDE - ODBC будет лучше? Я уже полчаса пытаюсь подключиться в базе через БДЕ - нbкак не могу :-( А через ADO - Пять секунд настройки TAdoConnection


juster   (2002-08-28 12:34:00) [15]

Сомневаюсь что через ADO будет быстрее


NDeu   (2002-08-28 12:16:00) [16]

Value is default property


ЮЮ   (2002-08-28 12:06:00) [17]

Устанавливаю свойство RequestLive
qry.RequestLive:=true;
А оно устанавливается? qry.RequestLive:=true - это только попытка установить. Если невозможно, то останется False.

И, вообще, с Access лучше работать чере ADO через Microsoft.Jet.OLEDB.4.0


juster   (2002-08-28 11:51:00) [18]

А насчет
Неужели qry["Field1"]:=SomeVariant;
Может всё-таки qry["Field1"].Value:=SomeVariant;
то это по моему одно и то же


juster   (2002-08-28 11:49:00) [19]

Не совсем правильно, перед изменением значения в поле
qry["Field1"]:=SomeVariant;
делаю qry.Edit;
и уже на этом этапе возникает ошибка
can not modify a read-only dataset


ЮЮ   (2002-08-28 11:40:00) [20]

Неужели qry["Field1"]:=SomeVariant;
Может всё-таки qry["Field1"] .Value:=SomeVariant;


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо