Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как работать с DBC базой? 
:(
    Опции темы
dikiy
Дата 15.2.2006, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть фоксовая база DBC в одной из таблиц(в которой 145 полей) необходимо изменить данные, но менять ничего не дает пишет SQL Statement too long
Кто нибудь знает как можно сделать?
PM MAIL   Вверх
Vas
Дата 15.2.2006, 09:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Сократи текст запроса, включай в него только изменяемые поля, а не все:
Код

update table.dbc set field_update=new_value where id=...




--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
dikiy
Дата 15.2.2006, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Это ничего не дает, запроса то нет я просто пытаюсь в определенное поле записать данные и вылетает эта ошибка
PM MAIL   Вверх
Vas
Дата 15.2.2006, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(dikiy @ 15.2.2006, 09:50 Найти цитируемый пост)
Это ничего не дает, запроса то нет я просто пытаюсь в определенное поле записать данные и вылетает эта ошибка

Запрос есть smile
Во-первых, какими компонентами пользуемся, сдается что TTable, так?
Во-вторых, кусок кода можно (все таки не телепаты здесь smile )



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
dikiy
Дата 15.2.2006, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну пользуюсь я действительно TTable, подсоединяюсь через BDE, а кусок примерно такой:
Table1.edit;
table1.fieldvalues['pol']:='М';
table1.post;
что-то в этом роде smile

PM MAIL   Вверх
Vas
Дата 15.2.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(dikiy @ 15.2.2006, 10:14 Найти цитируемый пост)
Ну пользуюсь я действительно TTable, подсоединяюсь через BDE, а кусок примерно такой:
Table1.edit;
table1.fieldvalues['pol']:='М';
table1.post;
что-то в этом роде

К сведению TTable это тот-же TQuery только запросы к таблице он строит сам и не всегда оптимальные.
Альтернатива, кидаем на форму TQuery и кнопку, код ей пишем типа следующего:
Код

if Query1.Active then Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('update имя_твоей_таблы set pol='+#39+'M'+#39);
try
ExecSQL;
except
Raise Exception.Create('Ошибка выполнения запроса');
end;
//делаем рефреш твоего Table
Table1.Refresh;



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
dikiy
Дата 15.2.2006, 11:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Эдорово, всем присвоил .М., а как теперь присвоить кому надо Ж я с методом update не работал разъясни пожалуйста smile
PM MAIL   Вверх
Vas
Дата 15.2.2006, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(dikiy @ 15.2.2006, 11:17 Найти цитируемый пост)
Эдорово, всем присвоил .М., а как теперь присвоить кому надо Ж я с методом update не работал разъясни пожалуйста


А ты можешь по какому-то принципу выбрать кому нужно "Ж"? Если можешь, то SQL будет приблизительно такой:
Код

update your_table set pol='Ж' where 'условие по которому выбираешь женщин'




--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
dikiy
Дата 15.2.2006, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Тут такая ситуация, у меня две таблы в одной есть пол, а в другой нет, но в обеих есть табельный номер эти таблы в разных базах а запрос-то можно использовать для таблиц из разных баз?
PM MAIL   Вверх
Vas
Дата 15.2.2006, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Попробуй так:
Код

update table1 set pol='Ж' where tab_number in (select tab_namber from table2)

Добавлено @ 11:34
Пардон не доописал в предыдущем посте:
Код

update table1 set pol='Ж' where tab_number in (select tab_namber from table2 where pol='Ж')

Добавлено @ 11:40
В запросе указывай непосредственно путь к файлу
"C:\Db1\table1.dbc" для второй "C:\Db2\table1.dbc"


--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
dikiy
Дата 15.2.2006, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Vas @ 15.2.2006, 11:33 Найти цитируемый пост)
Попробуй так:
код SQL
1:

update table1 set pol='Ж' where tab_number in (select tab_namber from table2)


а можно использовать в запросе одновременно BDE и ADO таблицы?
Код

update table1 set pol='Ж' where tab_number in (select tab_namber from ADOtable2)

PM MAIL   Вверх
Vas
Дата 15.2.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



Цитата(dikiy @ 15.2.2006, 11:45 Найти цитируемый пост)
а можно использовать в запросе одновременно BDE и ADO таблицы?


Наверное нет придется средствами Delphi создавать два подключения идти по ADOTable выбирать пол и табельный номер и запускать запрос обновления таблицы DBC
Код

update your_table set pol='Ж' where tab_number="переменная со значением tab_number из ADOTable"





--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
PM MAIL   Вверх
dikiy
Дата 15.2.2006, 12:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Попробую потом напишу. Спасибо большое за помощь!
PM MAIL   Вверх
dikiy
Дата 15.2.2006, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Что-то нифига так не получается делаю так:
Код

query1.Params[0].AsString:=inn;
query1.Params[1].AsString:=tab;
try
query1.ExecSQL;
except
Raise Exception.Create('Ошибка');
end;

До этого естественно создал запрос :
Код

update spisok set inn=:inn 
where tabno=:tab


Толи я что-то недогоняю, толи одно из двух smile
PM MAIL   Вверх
Vas
Дата 15.2.2006, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 830
Регистрация: 29.6.2005
Где: Stavropol region

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



А inn и tab значения откуда берешь, они у тебя должны быть вытянуты перед update'ом из таблицы Access. Что-то типа такого:
Код

ADOQuery1.SQL.Add('select tab, inn from table2');
ADOQuery1.Open;
ADOQuery1.First;
while not ADOQuery1.Eof do
begin
query1.Params[0].AsString:=ADOQuery1.Fields[0].AsString;
query1.Params[1].AsString:=ADOQuery1.Fields[1].AsString;
try
query1.ExecSQL;
except
Raise Exception.Create('Ошибка');
end;
ADOQuery1.Next;
end;



--------------------
И опыт, сын ошибок трудных, И гений, парадоксов друг, И случай, бог изобретатель. ... (А.С. Пушкин)
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.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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