![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибки не выдает ,но и не делает того, что надо [D7, Paradox]
ViktorZ © (2005-10-23 12:13:00)Короче есть Форма вот кусок кода, который не выдает ошибки, но и не делает того, что нужно. Ладно бы ошибку выдал,
а то вслепую трудно. Грешу на второй Query.
Вот когда я пишу:
Query1.SQL.Add('UPDATE PCHECK.DB SET PCHECK.DB.Curency = 15 where PCHECK.DB.Cnum =2 ');
то все делается как надо.
Вот собстенно код:
procedure TForm1.Button3Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
//Query1.SQL.Add('SELECT Pcheck.Curency, PcheckNEW.Curency FROM ":STANDARD1:PCHECK" PCHECK, ":STANDARD2:PCHECKNEW" PCHECKNEW');
//Query1.ExecSQL;
Query1.SQL.Add('UPDATE PCHECK.DB SET PCHECK.DB.Curency = STANDARD2.PCHECKNEW.DB.Curency where PCHECK.DB.Cnum = STANDARD2.PCHECKNEW.DB.Cnum');
Query1.ExecSQL;
end;
end.
Версия Делфи:7
ОС ХР SP2
если что нуно нужно то пишите.
Заранее спасибо.
ViktorZ (2005-10-27 19:52:00) [1]Все сделал почти. Теперь вроде все работает. Узнал нового и полезного.
ViktorZ (2005-10-27 17:43:00) [2]Спасибо всем.
ANB (2005-10-26 14:21:00) [3]
> ViktorZ (26.10.05 13:11) [35]
Тогда прежде чем отдавать таблицу, и портить ее четверками, заводи в ней доп поле (ID), заполняй его уникальными значениями, делай копию. Потом порти, после возврата чини. Связывай строки именно по этому полю - ID. Иначе счастья не будет. Впрочем, если записи физически местами не менялись, можно сию процедуру и сейчас проделать. Только придется это делать с двумя таблицами и результат не очень гарантирован. С помощью SQL и в парадоксовской таблице ты это не проделаешь, хотя может АП сможет помочь. Задай новый вопрос.
ViktorZ (2005-10-26 13:11:00) [4]Я ж не со зла а от непонимания? Я не знаю что такое QBE. По поводу создать таблицы заново то: ситуация такая, таблицу берут с объекта, несут мне, я в таблице менаю столбец Куренси на все четверки(я это сделал), потом ее относят обратно и делают там с ней что-то потом опять дают мне и я там где были четверки ставлю те цифры которые были первоначально. Вот вся задача, вижу свою вину в том чо сразу не сказал как есть, наверное это от безысходности. Заранее прошу прощения что так получилось.
msguns (2005-10-26 11:22:00) [5]>ViktorZ (26.10.05 10:51) [32]
Ты проверял наличие повторяющихся "ключей" как советовали в [20] (QBE) ?
Если нет, то проверь. И хватит людям голову морочить "петербургскими тайнами"
sniknik (2005-10-26 11:16:00) [6]ViktorZ (26.10.05 10:51) [32]
не придется, если реализуеш то что сдесь советовали. т.е. досточно восстановить ключь (а еще лучше создать таблици заново с той же структурой и с ключевым полем (восстановление геморнее), и перелить данные, плюс при копировании "отловятся" дубли, при восстановлении может просто сказать "не могу изза дубликатов" и все. дубли у тебя наверняка есть т.к. поле которое ты называл гарантированно автоинкрементным и недублирующимся на самом деле простого целого типа... в общем обманывал ты нас по полной... )
сделаеш все и тогда запрос из msguns © (23.10.05 18:01) [7] на твоих таблицах станет рабочим.
ViktorZ (2005-10-26 10:51:00) [7]конечно нет, но тут мне похоже придется раз не вдомек.
msguns (2005-10-26 09:18:00) [8]>ViktorZ (25.10.05 20:03) [30]
Ты когда овощи покупаешь, домой по картошине носишь ?
ViktorZ (2005-10-25 20:03:00) [9]Sorry, я с базами мало знаком. Начитался тут всего с подряд.Про воостановление ключа я просто не знал. Вообще идеяу меня такая взять два грида для 2ух таблиц. В 1 загрузить одну таблицу и др в другой грид. А потом по циклу перегнать из одного в другой.
sniknik (2005-10-24 20:20:00) [10]> Конешно учел пароль.
а ключь про который так долго все говорят? раз не приведены файлы ключей то значит нет их. (ну или хоть сказал бы, восстановите ключь вот по этому полю)
а без него таблица тоже ведь становится необновляемой (для запросов), табличными методами вроде бы можно обновить.
ViktorZ (2005-10-24 19:39:00) [11]Конешно учел пароль. Я ж не тупой))) глядите на базы:
www.viksite.narod.ru/PCHECK.DB
www.viksite.narod.ru/PCHECKNEW.DB
Пароль Aeroflot_Plus.
msguns (2005-10-24 09:20:00) [12]Блин, уже четверть сотни постов, а воз и ныне там..
Может уж раскроешь Великую Тайну Мальчишов и покажешь таки структуры обеих таблиц, в частности инфу о ключах ?
sniknik (2005-10-24 09:02:00) [13]> Должен использоваться обновляемый запрос.
я же говорил будет более понятная ошибка. так и есть, это понятнее чем ничего. ;о)
В операции должен использоваться обновляемый запрос. (Ошибка 3073)
Попытка запустить, открыть или изменить запрос, который не является обновляемым.
Возможные причины:
■ Попытка запустить запрос, в котором предпринимается попытка обновить необновляемое поле. Например, создан запрос, в котором предпринимается попытка обновить поле на стороне «один» отношения «один-ко-многим».
■ Попытка использовать устаревший метод OpenQueryDef для запроса, находящегося в базе данных, открытой с доступом только для чтения.
База данных может быть доступной только для чтения по одной из следующих причин:
■ База данных была открыта только для чтения с помощью метода OpenDatabase или элемента управления Data Visual Basic.
■ Файл базы данных определен с доступом только для чтения в сетевой операционной системе.
■ Пользователь не имеет привилегий записи в этот файл базы данных в сетевой среде.
Закройте базу данных, снимите ограничение доступа только для чтения и вновь откройте файл с доступом для чтения/записи.
■ Отсутствуют разрешения на внесение изменений в запрос. Для изменения разрешений обратитесь к системному администратору или создателю таблицы или запроса.
кстати ты вроде говорил у тебя таблици запаролены... говорил после того как я показывал как через ADO делается... как думаеш я учел пароль на базу если ты сказал про него позже? сними и попробуй еще раз.
ViktorZ (2005-10-24 08:36:00) [14]Пробовал АДО. ПИшет. Должен использоваться обновляемый запрос.
ViktorZ (2005-10-24 06:11:00) [15]msguns © (23.10.05 20:33) [20]
>ViktorZ (23.10.05 20:24) [18]
>Правильно то правильно, но не работает
1. Пробовал через подзапрос как в [7] ?
Да пробовал аналогично, ошибки не выдает, но и не ничено не делает. А Мож это поможет. Две табличы полностья совпадают кроме одного поля Curency и они запаролены.
Anatoly Podgoretsky (2005-10-23 21:33:00) [16]sniknik © (23.10.05 20:59) [22]
То что он обманывает насчет дублей я был уверен.
Только добавь еще оди нфактор - это Парадокс!
sniknik (2005-10-23 20:59:00) [17]ViktorZ (23.10.05 19:55) [13]
> Простите конечно уважаемый sniknik. Но ваш запрос у меня
> вообще не пошел ругаясь на Лефт и джоин. Сорри конечно,
> но у меня парадох, а он что то их не переваривает.
прощаю... ;о))
он правильно не сработал, я же там писал что это "если бы синтаксис был как access"... а кавычки "" BDE шные поставил, в обшем это пример "наугад" (запрос мутант ;) а не рабочий запрос.
и не переваривает "Лефт и джоин" в апдейте не парадокс а движок исполняющий запрос (BDE)
другой движок - Jet это поймет (с исправлениями) хотя там теже парадоксные таблици останутся см. [19]
Anatoly Podgoretsky © (23.10.05 20:52) [21]
mnm (23.10.05 20:12) [17]
> Во второй таблице более одной записи с кодом. Что означает отсутствие уникальности по полю связи.
;о))) вот вам и автоинкремент. ;о)
> А NUM у тебя гарантировано уникальный в PCHECKNEW ?
ViktorZ (23.10.05 16:30) [3]
> да гарантированно. Это автоинкремент.
(ну тут конечно не автоинкремент виноват. так думаю ;)
Anatoly Podgoretsky (2005-10-23 20:52:00) [18]mnm (23.10.05 20:12) [17]
Во второй таблице более одной записи с кодом. Что означает отсутствие уникальности по полю связи.
msguns (2005-10-23 20:33:00) [19]>ViktorZ (23.10.05 20:24) [18]
>Правильно то правильно, но не работает
1. Пробовал через подзапрос как в [7] ?
2. Попробуй в DBD дать QBE запрос на аналогичный селект с CheckPlus во всех колонках и посмотри сколько записей вернет.
sniknik (2005-10-23 20:27:00) [20]> Мож кто подскажет как мне в массив затолкать из одной таблицы а потом в другую из массива вставить.
ну "дошол до ручки" ;о))
можно так, без массива.
делаеш коннект к ADO, Jet
кидаеш на форму ADOConnection1
в ADOConnection1.ConnectionString пишеш строку
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\;Extended Properties=Paradox 7.x;Persist Security Info=False
(D:\ это типа твой путь к базе)
в ADOConnection1.LoginPrompt пишеш false
после по кнопке(например) выполняеш слегка модифицированный запрос из [9]
ADOConnection1.Execute('UPDATE PCHECK AS p INNER JOIN PCHECKNEW AS s ON p.Cnum = s.Cnum SET p.[Curency] = s.[Curency]');
должно сработать. ну или более менее понятную ошибку выдать ;о)). для гарантии надо попробовать.