Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблемы с сортировкой, Сортировка в БД Paradox 
:(
    Опции темы
Smoki
Дата 3.6.2006, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.6.2006

Репутация: нет
Всего: нет



Знает ли кто нибудь как решить такую проблему:
Есть БД paradoxб связь BDE. Необходимо организовать сортировку, как в access, для конкретно выбранного поля.
Т.е. не просто запрос :  SELECT * FROM "'+Имя открытой таблицы+'" ORDER BY фиксированное поле', 
 а что то типа:   SELECT * FROM "'+Имя открытой таблицы+'" ORDER BY '+выбранное поле.

Я делаю так :
Код

//Все компоненты находятсяна одной форме
DataSource1.DataSet:=Form3.Query1;
DBGrid1.DataSource:=Form3.DataSource1;
Table1.Close;
Query1.Close;
Query1.DatabaseName:=Table1.DataBaseName;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM "'+Table1.TableName+'" ORDER BY '+DBGrid1.SelectedField.FieldName);
// Где "DBGrid1.SelectedField.FieldName"- указывает на имя конкретно выбранного столбца (других способов я просто не знаю)
Query1.ExecSQL;
Table1.Open; 


Но ничего не получается.  Выскакивает такая ошибка : Acess violation at adress ... in module '*.exe'.
Не знаю что делать. smile  Подскажите как решить проблему. 
PM MAIL   Вверх
ТоляМБА
Дата 3.6.2006, 04:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Во-первых: самые распространенные грабли
Цитата(Smoki @  3.6.2006,  00:15 Найти цитируемый пост)
SELECT * FROM 

и какого здесь делает
Цитата(Smoki @  3.6.2006,  00:15 Найти цитируемый пост)
ExecSQL
, когда надо Query1.Open;
Про это даже в хэлпе написано.
Во-вторых: вывди в ShowMessage
Цитата(Smoki @  3.6.2006,  00:15 Найти цитируемый пост)
DBGrid1.SelectedField.FieldName
,
она там действительно показывает выбранное поле?
А если не выбрал? На будущее поставь проверку.
 
PM   Вверх
Smoki
Дата 3.6.2006, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.6.2006

Репутация: нет
Всего: нет



DBGrid1.SelectedField.FieldName - показывает имя выбранного поля.
Насчет ExecSQL и open - пробовал и так и так, не получается пишет ту же ошибку.
 
PM MAIL   Вверх
matriza
Дата 3.6.2006, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 7.5.2006

Репутация: нет
Всего: нет



попробуй убрать из связки (а как я понял там связка из Table+Query+Datasource) Table... у меня бывало что с такой связкой в парадоксе запросы просто игнорировались... причём связка делалась разными способами... и в итоге пришлось отказаться от Table и работать только с Query... прибавилось несколько небольших сложностей =) но зато всё получилось... =) 
PM MAIL   Вверх
ТоляМБА
Дата 3.6.2006, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Парадокса 6 нет, создавал в DatabaseDesktop с типом Paradox 7.
Создал 2 едита - в первом имя таблы, во втором имя поля для сортировки.
Текст запроса
Код

Query1.SQL.Clear;
Query1.SQL.Add('Select * from '+Edit1.Text+' order by '+Edit2.Text);
Query1.Open;

Выведи через ShowMessage(Table1.TableName) - из текста запроса, что пишет, выведи также Query1.SQL.Text - это текст всего запроса - выводить перед Open.
Короче или у тебя лишние двойные кавычки или имя таблицы не берётся.
 
PM   Вверх
Smoki
Дата 3.6.2006, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.6.2006

Репутация: нет
Всего: нет



Вывел через showmessage - показывает полный путь к базе (D:\...\...\...\base.db), с кавычкаим все OK.
Я немного изменил конструкцию получения текущего имени столбца:

1)Кинул на форму edit1. (для проверки)
2) Событию DBGrid'a OnCellClick указал 
Код

Edit5.Text:=DBGrid1.SelectedField.FieldName;    // копировать в edit имя теккущего столбца  

3)Собственно сама процедура сортировки стала такой:

Код

Edit5.Text:=DBGrid1.SelectedField.FieldName;
DataSource1.DataSet:=Form3.Query1;
DBGrid1.DataSource:=Form3.DataSource1;
Table1.Close;
Query1.Close;
Query1.DatabaseName:=Table1.DataBaseName;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * FROM "'+Table1.TableName+'" ORDER BY '+Edit5.Text);
Query1.Open;
Table1.Open;


Работает с полями типа ftstring, ftcurrency,ftdatatime, не всегда работает с ftdate и fttime и вообще не хочет работать с ftinteger.  smile 

С ftdate и fttime не работает лишь в тех случаях если столбцы названы date и time соответственно(Проверено). 
PM MAIL   Вверх
Golden Hands
Дата 3.6.2006, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Золотой
****


Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: 2
Всего: 83



Цитата(ТоляМБА @  3.6.2006,  07:59 Найти цитируемый пост)

и какого здесь делает
Цитата(Smoki @  3.6.2006,  00:15 Найти цитируемый пост)

ExecSQL

ExecSQL применяется в тех случаях, когда результат выполнения не возвращает наборов данных (insert, update, delete...). В других случаях (select) используются методы Open и Close (аналогичные Active:=True и Active:=False).


Цитата(Smoki @  3.6.2006,  18:47 Найти цитируемый пост)
 показывает полный путь к базе (D:\...\...\...\base.db

Могу судить только по dBase (но думаю что в Paradox так же), что такой путь неприемлем. Необходимо указывать только имя файла без расширения. В данном случае - base.


Цитата(Smoki @  3.6.2006,  18:47 Найти цитируемый пост)
Собственно сама процедура сортировки стала такой:

сделай так:
Код

Query1.SQL.Add('SELECT * FROM '+Table1.TableName+' ORDER BY '+Edit5.Text);

Двойные кавычки там нафиг не нужны  smile  В кавычки (и то в одинарные) заключается только текст, но никак не имена полей и таблиц.


Цитата(Smoki @  3.6.2006,  18:47 Найти цитируемый пост)
С ftdate и fttime не работает лишь в тех случаях если столбцы названы date и time соответственно(Проверено). 

Не работает, ибо названиям столбцов присвоены ключевые слова SQL. Исправляется так:
вместо
Код

Query1.SQL.Add('SELECT * FROM '+Table1.TableName+' ORDER BY '+Edit5.Text);

пиши
Код

Query1.SQL.Add('SELECT * FROM '+Table1.TableName+' ORDER BY '+Table1.TableName+'.'+Edit5.Text);


 


--------------------
Мы обречены... но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло... © Тень Света
PM MAIL ICQ   Вверх
Smoki
Дата 4.6.2006, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.6.2006

Репутация: нет
Всего: нет



Сделал как предложили:
Цитата

пиши
    
Query1.SQL.Add('SELECT * FROM '+Table1.TableName+' ORDER BY '+Table1.TableName+'.'+Edit5.Text);

все равно не работает. С полями  ftdate и fttime  та жа проблема, а   ftinteger  вообще не хочет работать. smile 
Может есть другой способ.  

Это сообщение отредактировал(а) Smoki - 4.6.2006, 09:59
PM MAIL   Вверх
ТоляМБА
Дата 5.6.2006, 07:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Таблицу можешь выложить с которой траблы? Или на мыло 
PM   Вверх
Smoki
Дата 6.6.2006, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.6.2006

Репутация: нет
Всего: нет



ТоляМБА, я вообще-то пытаюсь написать программу для просмотра таблиц paradox.
Что-то на подобии Aceess, но  естественно  скромнее в плане
функций. Поэтому у меня все таблицы с полями  ftinteger- большая трабла для меня.
Почему то не хотят сортироваться поля названия которых начинается с цифры (например 4Field)
и в названии которых есть пробел (например First Field).Относительно цифр у меня подозрения 
что это из-за того что число воспринимается как номер столбца.
Если да то как можно енто исправить, ну и проблему с пробелами тоже.


    

Это сообщение отредактировал(а) Smoki - 6.6.2006, 21:19
PM MAIL   Вверх
ТоляМБА
Дата 7.6.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Цитата(Smoki @  6.6.2006,  21:15 Найти цитируемый пост)
First Field
С Парадоксом не работал,но в MS SQL Server такая проблема решается следующим образом
Код

select [First Field]
from Table1
Посмотри, может в Парадоксе есть что-нибудь подобное. 
PM   Вверх
Smoki
Дата 25.6.2006, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 2.6.2006

Репутация: нет
Всего: нет



Помогите решить такую проблему:

После выполнении сортировки в таблице paradox, я не могу
изменять данные таблицы,  подскажите пожалуйста в чем проблема.
Вот код сортировки:
 
Код

DataSource1.DataSet:=Form3.Query1;
  DBGrid1.DataSource:=Form3.DataSource1;
  Table1.Close;
  Query1.Close;
  Query1.DatabaseName:=Table1.DataBaseName;
  Query1.SQL.Clear;
  Query1.SQL.Add('SELECT * FROM "'+Table1.TableName+'" ORDER BY '+Edit5.Text+' ASCENDING;');     // в  Edit5.Text передается имя выбранного столбца
  Query1.Open;
  Table1.ReadOnly:=false;    
  Table1.Open; 
 
PM MAIL   Вверх
skyboy
Дата 26.6.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



странно. requestlive установлено в True? 
PM MAIL   Вверх
ТоляМБА
Дата 26.6.2006, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Цитата(skyboy @  26.6.2006,  10:44 Найти цитируемый пост)
странно. requestlive установлено в True?  
4 skyboy, я сам удивился. Фишка в том что при requestlive установленном в True, такой запрос:
Код
Select *
from Table1

даёт редактировать? А такой:
Код
Select *
from Table1
ORDER BY Field1
НЕТ!  smile
Где грабли пока не нашёл.  
PM   Вверх
skyboy
Дата 26.6.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: нет
Всего: 260



ТоляМБА, хех. Значит, даже при простой сортировке используется временная таблица, и позволять редактировать её - бессмысленно и нелогично smile Я думал, что только при использовании join/group такое начинается... 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.