![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() Всем привет! У меня возникла проблема следующего плана. Есть БД в 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
|
|||
|
|||
![]() А что, имена полей второй таблицы неизвестны?
Зачем имена полей хранить в первой таблице (такой вывод можно сделать из приведенного выражения)? Это что-то новенькое в базостроении. "Пришлось создать два источника данных, ссылающихся на одну и ту же БД" - звучит обреченно, а тем временем другие разработчики почему-то не очень расстраиваются по этому поводу. Два, так два, хоть двадцать два. Сколько надо, столько и создаем. Если задача стоить в том чтобы брать данные из одной таблицы и "кидать" в другую, то так и надо делать. Берем информацию из первой таблицы (как пример: S := Table1.FieldByName('<имя поля>').AsString), Обрабатываем и затем записываем во вторую таблицу (в переменной "S" обработанное, так же для примера): Код:
Table2.Edit; //обязательно переводим DataSet в режим редактирования Table2.FieldByName('<имя поля>').AsString := S; Table2.Post //непосредственно - запись Чтобы избавиться от запроса логина и пароля надо найти в списке свойств компонента, который соединяется с базой, свойство LoginPrompt и установить его в значение False. Не забывайте делать резервные копии |
#3
|
|||
|
|||
![]() Мне почему-то думалось, что раз БД одна, то и связь должна быть одна. Если две - это правильно - оч.хорошо. Мне были не понятны проблемы с записью во вторую таблицу. Table2.edit не описала, только запись. Мда, ну я даю...
Напишу подробности. В первой таблице хранятся данные по приборам, группам и параметрам. На основании этих данных формируется запрос DDE-серверу. Данные, которые приходят от сервера нарезаются в соответствии именен параметра и должны записываться в другую таблицу в поле с уникальным именем состоящим из имени группы,имени прибора и имени параметра. Это сделано для удобства пользователя, что он сам потом мог подключать новые приборы и параметры. Сейчас опять ошибку выдает, но почему-то в процедуре поиска по тексту (как раз той самой нарезке ответа от сервера). Которая до этого работал абсолютно четко. Буду разбираться. Спасибо. Последний раз редактировалось mmik, 27.02.2009 в 09:21. |
#4
|
|||
|
|||
![]() У меня с БД вообще проблемы. Еще несколько вопросов. Связь ODBC,
создавала ее в BDE-administrator. Там написано, что эта связь возможна только на этом компе. А если скомпилировать проект и перенести на другой? Если вносить изменения в БД связь автоматически обновится? |
#5
|
|||
|
|||
![]() "Связь возможна на этом компе" - имеется ввиду, что для запуска проги на другом компе нужно тащить за собой библиотеку BDE, если на нем не установлена Delphi.
Еще можно эту фразу интерпретировать как то, что база запускается в монопольном режиме и связь с ней с нескольких компов невозможна. "...должны записываться в другую таблицу в поле с уникальным именем состоящим из имени группы,имени прибора и имени параметра." Это что же получается? Динамически изменяемая структура таблицы? Более чем странная организация базы. Если приборов десяток, то ладно, а если их тысячи? Будем иметь таблицу с более чем тысчью полей? Во могих СУБД на имена колонок таблицы (полей) накладываются ограничения и по длине, и по синтаксису. Как вы собираетесь разруливать эту ситуацию в Access? Может быть все же предполагалось под "уникальным именем" значение одного из полей таблицы, а не поле таблицы? Короче, темный лес в вашем департаменте. Что ошибки? Как такая база вообще может работать. Что за компоненты применяются для доступа к базе? Не забывайте делать резервные копии |
#6
|
|||
|
|||
![]() приборов сейчас 30 будет около 50. Пользователю самому придется добавить около 20 приборов. Чтобы не менять код на delphi все делается в цикле. Пользователю нужно будет только добавить инфу в одну таблицу и поля в другую. Это сделать они смогут. Только из-за этого такие заморочки.
Ошибки исправила. Но это уже мелочи. С сетью буду разбираться позже. Я много читала, что выбрать BDE или ADO. Люди спорят. Ваше мнение, что лучше? Компоненты: table и datasource. От запроса паролей так и не могу избавиться. Последний раз редактировалось mmik, 02.03.2009 в 09:54. |
#7
|
||||
|
||||
![]() в свойствах компонента ADOConnection отключи свойство LoginPrompt,
выставив его в False. |
#8
|
|||
|
|||
![]() Цитата:
|
#9
|
|||
|
|||
![]() В ввойство 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);" А вот это ЗАЧЕМ? Это не просто моветон, за это в приличном обществе канделябрами... Я предложил в личке свою помощь - реакция нулевая. А через вопросы на форуме мало чего можно состряпать путного. Здесь вопросы могут помочь только для уточнений деталей работоспособного приложения, да еще кое в чем, а делать базу не особенно в этом разбираясь с помощью форума - дело тупиковое. Не забывайте делать резервные копии |