Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > как работать с DBC базой?


Автор: dikiy 15.2.2006, 09:26
Есть фоксовая база DBC в одной из таблиц(в которой 145 полей) необходимо изменить данные, но менять ничего не дает пишет SQL Statement too long
Кто нибудь знает как можно сделать?

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

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


Автор: dikiy 15.2.2006, 09:50
Это ничего не дает, запроса то нет я просто пытаюсь в определенное поле записать данные и вылетает эта ошибка

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

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

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

Автор: Vas 15.2.2006, 11:04
Цитата(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;

Автор: dikiy 15.2.2006, 11:17
Эдорово, всем присвоил .М., а как теперь присвоить кому надо Ж я с методом update не работал разъясни пожалуйста smile

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


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

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


Автор: dikiy 15.2.2006, 11:29
Тут такая ситуация, у меня две таблы в одной есть пол, а в другой нет, но в обеих есть табельный номер эти таблы в разных базах а запрос-то можно использовать для таблиц из разных баз?

Автор: Vas 15.2.2006, 11:33
Попробуй так:
Код

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"

Автор: dikiy 15.2.2006, 11:45
Цитата(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)

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


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

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



Автор: dikiy 15.2.2006, 12:24
Попробую потом напишу. Спасибо большое за помощь!

Автор: dikiy 15.2.2006, 13:37
Что-то нифига так не получается делаю так:
Код

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

Автор: Vas 15.2.2006, 16:50
А 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;

Автор: dikiy 15.2.2006, 17:01
Спасибо ребята разобрался все было очень просто smile я переменную tab представлял как строку, а она integer вот и все smile !!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)