Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2007, 12:47   #1
nataly_ukr
Пользователь
 
Регистрация: 21.08.2007
Сообщений: 46
По умолчанию MasterSource - выдает ошибку

Связываю два dbf файла через Mastr Source Связать нужно по трем полям
В строке Form3.Table2.MasterFields:='ddok | ndok | kfio'; выдает ошибку "В таблице нет поля 'ddok | ndok | kfio' В литературе написан такой же синтаксис , а в жизни как надо делать? Пробовала соединить + , тoже выдает ошибку.


Form3.Table1.TableName:='kasot7.dbf ';
Form3.Table1.Active:=true;

Form3.Table2.TableName:='otcet7.dbf ';
Form3.Table2.Active:=true;
Form3.Table2.IndexName:='ind10.mdx' ;
Form3.Table2.MasterSource:=DataSour ce1;;
Form3.Table2.MasterFields:='ddok | ndok | kfio';
nataly_ukr вне форума Ответить с цитированием
Старый 11.10.2007, 12:51   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

наскока я помню нуна так :
Form3.Table2.MasterFields:='ddok;nd ok;kfio';
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.10.2007, 13:02   #3
nataly_ukr
Пользователь
 
Регистрация: 21.08.2007
Сообщений: 46
По умолчанию

Для Stilet Пробовала с ';' выдает ошибку Fild index out of range Обратите внимание это DBF файл , а там соединение ключей идет через +
nataly_ukr вне форума Ответить с цитированием
Старый 11.10.2007, 13:09   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Сообщение от nataly_ukr Посмотреть сообщение
Для Stilet Пробовала с ';' выдает ошибку Fild index out of range Обратите внимание это DBF файл , а там соединение ключей идет через +
Наташ, это если составной индекс в ФоксПро писать то да. А в делфе ты хелп почитай на MasterSource, там написано - разделитель Semicolons.
У тя с индексами проблема а не с подключением.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.10.2007, 13:34   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Form3.Table2.IndexName:='ind10.mdx' ;
А что, для ДБФ индексы указываются именем файла?
mihali4 вне форума Ответить с цитированием
Старый 11.10.2007, 15:04   #6
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

IMHO: Для соединения таблиц компонентами TTable через MasterSource по нескольким полям нужно чтобы подчиненная таблица имела составной индекс, в котором поля связи должны быть ведущими.

Однако, стандартные компоненты Delphi для работы с БД, по какой-то непонятной для меня причине, считают, что составные индексы могут иметь только файлы Paradox, а dbf таких индексов не имеют и потому с ними не работают

В качестве варианта могу предложить соединиться с подчиненной таблицей с помощью TQuery и организовать связь между таблицами через параметрический запрос. Правда, работать это будет медленнее.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 11.10.2007, 16:54   #7
nataly_ukr
Пользователь
 
Регистрация: 21.08.2007
Сообщений: 46
По умолчанию

С составными индексами я работаю в DBF без проблем , а здесь какой-то тупичек
Спасибо за советы Буду ждать еще сообщений
nataly_ukr вне форума Ответить с цитированием
Старый 11.10.2007, 23:54   #8
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да никакого тупика нет, просто сначала ставим условия, а уж потом требуем выдать результат, т.е.:
Код:
Немного переделываем вот это:

Form3.Table2.Active:=true;
Form3.Table2.IndexName:='ind10.mdx';
Form3.Table2.MasterSource:=DataSource1;;
Form3.Table2.MasterFields:='ddok | ndok | kfio';

и получаем:

//ставим условия
Form3.Table2.IndexName:='ind10';
Form3.Table2.MasterSource:=DataSource1;
//чтобы не было ошибки "В таблице нет поля 'ddok | ndok | kfio', ставим 
//правильный разделитель - ";""
Form3.Table2.MasterFields:='ddok[COLOR="Red"];[/СOLOR]ndok;kfio';
//получаем результат
Form3.Table2.Active:=true;
Кстати, вариант Table2.Open несколько короче, вам не кажется?
А зачем вы везде употребляете Form3...?
У вас эта процедура находится в другом модуле, не в том, которому принадлежит форма Form3?
Если в том же, то ставить везде предваряющий параметр "Form3." абсолютно излишне...

Последний раз редактировалось mihali4; 12.10.2007 в 00:09.
mihali4 вне форума Ответить с цитированием
Старый 12.10.2007, 06:16   #9
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от nataly_ukr Посмотреть сообщение
С составными индексами я работаю в DBF без проблем , а здесь какой-то тупичек
Спасибо за советы Буду ждать еще сообщений
Извините, вы не подскажете как создать составной индекс для DBF из Delphi?

Я небольшой специалист по этому вопросу и пользуюсь учебником В.В. Фараонов "Программирование баз данных в Delphi 7".
Там в главе "Составные индексы" написано буквально следующее:

Цитата:
... Для создания составного индекса в серверных таблицах и таблицах типа Paradox с помощью программы SQLExplorer используется SQL-запрос типа

CREATE INDEX IndexName ON TableName(Field1, Field2, ...)

В широко распространенных таблицах типа dBASE нельзя создать составной инденкс и, следовательно, реализовать быстрый поиск при участии нескольких полей. В базирующихся на них средствах разработки (dBASE III+,dBASE IV, FoxPro, Clipper) для этих целей обычно используют индекс, построенный по индексному выражению, с приведением нужных полей к строковому типу. Например:

STR(FINCODE,5)+LEFT(FINTYPE,1)+DTOS (FINDATE)

Это индексное выражение формирует строку из 5 символов преобразования целого значения поля FINCODE, первого символа значения строкового поля FINTYPE и преобразованного к строке значения даты из поля FINDATE.

Увы! Delphi не имеет средств поиска по индексным выражениям. Таким образом, использование таблиц dBASE в приложениях Delphi менее удобно, чем таблиц Paradox...
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 12.10.2007, 07:38   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Совершенно верно, поэтому для работы с составными индексами луче подойдет не BDE а ADO+провайдер FoxPro.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ADOQuery - выдает ошибку kiber0net0 Общие вопросы Delphi 2 02.09.2008 19:49
Windows2003 ошибку выдает Cantana Windows 11 07.12.2007 06:04
при поиске по базе выдает ошибку - Пропущен оператор в выражении frai БД в Delphi 1 09.11.2007 23:01
При активизации формы выдает ошибку Canadec Общие вопросы Delphi 11 04.09.2007 12:10
метод золотого сечения выдает ошибку... Skif Помощь студентам 7 09.04.2007 07:23