Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.02.2009, 11:40
mmik mmik вне форума
Прохожий
 
Регистрация: 26.02.2009
Сообщения: 5
Репутация: 10
По умолчанию связь двух таблиц одной БД Access

Всем привет! У меня возникла проблема следующего плана. Есть БД в Access, в которой две таблицы. Мне нужно брать данные из одной таблицы, обрабатывать их и кидать в другую. Пытаюсь реализовать следующим образом: на форме два datasource и два table. Пришлось создать два источника данных, ссылающихся на одну и ту же БД. При этом связь с первой таблицей (откуда данные читаются) есть, а вот со второй проблемы. Думаю со связью что-то напутано. Да, еще оговорюсь. Обращение к полям второй таблицы идет так:
table2.FieldByName(table1.Fields[1].AsString+table1.Fields[2].AsString+table1.Fields[i].AsString).AsString:=Search(edit2.Text,table1.Fiel ds[i].AsString);

как составное из имен полей первой таблицы.

Ошибки выдает разные:
Stream write error
Dataset not edit or insert mode

И еще, как избавиться от запроса логина и пароля доступа к БД при запуске приложения?
Ответить с цитированием
  #2  
Старый 26.02.2009, 13:13
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

А что, имена полей второй таблицы неизвестны?
Зачем имена полей хранить в первой таблице (такой вывод можно сделать из приведенного выражения)?
Это что-то новенькое в базостроении.
"Пришлось создать два источника данных, ссылающихся на одну и ту же БД" - звучит обреченно, а тем временем другие разработчики почему-то не очень расстраиваются по этому поводу. Два, так два, хоть двадцать два. Сколько надо, столько и создаем.

Если задача стоить в том чтобы брать данные из одной таблицы и "кидать" в другую, то так и надо делать.
Берем информацию из первой таблицы (как пример: S := Table1.FieldByName('<имя поля>').AsString),
Обрабатываем и затем записываем во вторую таблицу (в переменной "S" обработанное, так же для примера):
Код:
  Table2.Edit; //обязательно переводим DataSet в режим редактирования
  Table2.FieldByName('<имя поля>').AsString := S;
  Table2.Post //непосредственно - запись
Какие тут могут быть связи??? Все просто.

Чтобы избавиться от запроса логина и пароля надо найти в списке свойств компонента, который соединяется с базой, свойство LoginPrompt и установить его в значение False.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #3  
Старый 27.02.2009, 09:09
mmik mmik вне форума
Прохожий
 
Регистрация: 26.02.2009
Сообщения: 5
Репутация: 10
По умолчанию

Мне почему-то думалось, что раз БД одна, то и связь должна быть одна. Если две - это правильно - оч.хорошо. Мне были не понятны проблемы с записью во вторую таблицу. Table2.edit не описала, только запись. Мда, ну я даю...
Напишу подробности. В первой таблице хранятся данные по приборам, группам и параметрам. На основании этих данных формируется запрос DDE-серверу. Данные, которые приходят от сервера нарезаются в соответствии именен параметра и должны записываться в другую таблицу в поле с уникальным именем состоящим из имени группы,имени прибора и имени параметра. Это сделано для удобства пользователя, что он сам потом мог подключать новые приборы и параметры.
Сейчас опять ошибку выдает, но почему-то в процедуре поиска по тексту (как раз той самой нарезке ответа от сервера). Которая до этого работал абсолютно четко. Буду разбираться. Спасибо.

Последний раз редактировалось mmik, 27.02.2009 в 09:21.
Ответить с цитированием
  #4  
Старый 27.02.2009, 09:41
mmik mmik вне форума
Прохожий
 
Регистрация: 26.02.2009
Сообщения: 5
Репутация: 10
По умолчанию

У меня с БД вообще проблемы. Еще несколько вопросов. Связь ODBC,
создавала ее в BDE-administrator. Там написано, что эта связь возможна только на этом компе. А если скомпилировать проект и перенести на другой? Если вносить изменения в БД связь автоматически обновится?
Ответить с цитированием
  #5  
Старый 27.02.2009, 11:44
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

"Связь возможна на этом компе" - имеется ввиду, что для запуска проги на другом компе нужно тащить за собой библиотеку BDE, если на нем не установлена Delphi.
Еще можно эту фразу интерпретировать как то, что база запускается в монопольном режиме и связь с ней с нескольких компов невозможна.

"...должны записываться в другую таблицу в поле с уникальным именем состоящим из имени группы,имени прибора и имени параметра."
Это что же получается? Динамически изменяемая структура таблицы? Более чем странная организация базы.
Если приборов десяток, то ладно, а если их тысячи? Будем иметь таблицу с более чем тысчью полей?
Во могих СУБД на имена колонок таблицы (полей) накладываются ограничения и по длине, и по синтаксису.
Как вы собираетесь разруливать эту ситуацию в Access?

Может быть все же предполагалось под "уникальным именем" значение одного из полей таблицы, а не поле таблицы?

Короче, темный лес в вашем департаменте.
Что ошибки? Как такая база вообще может работать.

Что за компоненты применяются для доступа к базе?
__________________
Не забывайте делать резервные копии
Ответить с цитированием
  #6  
Старый 02.03.2009, 09:52
mmik mmik вне форума
Прохожий
 
Регистрация: 26.02.2009
Сообщения: 5
Репутация: 10
По умолчанию

приборов сейчас 30 будет около 50. Пользователю самому придется добавить около 20 приборов. Чтобы не менять код на delphi все делается в цикле. Пользователю нужно будет только добавить инфу в одну таблицу и поля в другую. Это сделать они смогут. Только из-за этого такие заморочки.
Ошибки исправила. Но это уже мелочи.
С сетью буду разбираться позже.
Я много читала, что выбрать BDE или ADO. Люди спорят. Ваше мнение, что лучше?
Компоненты: table и datasource. От запроса паролей так и не могу избавиться.

Последний раз редактировалось mmik, 02.03.2009 в 09:54.
Ответить с цитированием
  #7  
Старый 02.03.2009, 10:54
Аватар для pesi
pesi pesi вне форума
Активный
 
Регистрация: 12.09.2008
Сообщения: 275
Репутация: 43
По умолчанию

в свойствах компонента ADOConnection отключи свойство LoginPrompt,
выставив его в False.
Ответить с цитированием
  #8  
Старый 02.03.2009, 14:08
mmik mmik вне форума
Прохожий
 
Регистрация: 26.02.2009
Сообщения: 5
Репутация: 10
По умолчанию

Цитата:
в свойствах компонента ADOConnection отключи свойство LoginPrompt,
выставив его в False.
я не использую этот компонент
Ответить с цитированием
  #9  
Старый 02.03.2009, 20:04
san-46 san-46 вне форума
Активный
 
Регистрация: 25.04.2008
Сообщения: 383
Репутация: 33
По умолчанию

В ввойство Params TDatabase (в BDE) нужно "забить" имя пользователя и пароль. Далее свойство этого компонента LoginPrompt в False.

"table2.FieldByName(table1.Fields[1].AsString+table1.Fields[2].AsString+table1.Fields[i].AsString).AsString:=Search(edit2.Text,table1.Fiel ds[i].AsString);"
А вот это ЗАЧЕМ? Это не просто моветон, за это в приличном обществе канделябрами...
Я предложил в личке свою помощь - реакция нулевая. А через вопросы на форуме мало чего можно состряпать путного. Здесь вопросы могут помочь только для уточнений деталей работоспособного приложения, да еще кое в чем, а делать базу не особенно в этом разбираясь с помощью форума - дело тупиковое.
__________________
Не забывайте делать резервные копии
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:23.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025