Форум: "Базы";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
ВнизНе могу отладить создание таблицы в yaffil! Найти похожие ветки
← →
Aleksandr. (2005-02-22 12:23) [0]Коннекчусь к IbDB, активизирую транзакцию, вызываю IbTable1.CreateTable. Затем делаю IbTable1.Open, появляется ошибка, что таблица не найдена. Ладно, делаю транзакции Commit, таблица открывается. Закрываю транзакцию, активизирую снова, делаю через IbQuery запрос к этой таблице - таблица опять не найдена. Хотя элементарный просмотр по F3 файла базы данных показывает, что таблица в нем присутствует. Я впервые на yaffil перешел с Парадокса, объясните мне порядок работы с созданием, удалением и редактированием таблиц Interbase, пожалуйста, а то не пойму я никак, в чем проблемы!
← →
Val © (2005-02-22 12:28) [1]см.SQL: DDL, DML; подтверждение транзакций.
← →
Desdechado © (2005-02-22 12:43) [2]забей на Table, используй Query
создание и заполнение таблиц обязано быть в разных транзакциях
← →
Aleksandr. (2005-02-22 12:57) [3]Val © :
Нет на DDL, DML нихера об этом. Не первый год работал с MS SQL и Paradox, специфика проблемы чисто от InterBase.
Desdechado © :
Не совсем понял по обоим пунктам. Создавать таблицу запросом Вы имеете в виду? Разные транзакции - это как? У визуальных компонент привязка один на один: один TIbDataBase + один TIbTransaction. Воткнуть две компоненты транзакций и переключать их у датасетов при создании/изменении?
← →
Johnmen © (2005-02-22 13:14) [4]>Aleksandr.
Странно... Не первый год с MS SQL, а сам SQL знаешь ? Там есть команды CREATE TABLE..., ALTER TABLE..., etc.
И их выполнение, ест-но, д.б. "обрамлено" стартом-завершением транзакции.
Причем тут датасеты, вообще не ясно...
← →
Aleksandr. (2005-02-22 13:28) [5]Johnmen © :
Может, я неясно выразился. На MS SQL я в одну хранимую процедуру могу воткнуть и создание, и заполнение таблицы, и на стороне Делфи все ограничится наличием TADOConnection+TADOStoredProc. Если мне нужно иметь возможность отката изменений при работе с группой таблиц, я коннекту сделаю вручную вызов BeginTrans..CommitTrans, но ничего относительно создания таблиц и разруливания транзакций в связи с этим никогда применять не приходилось. А здесь я сталкиваюсь с тем, что на какие-то операции надо вручную вызывать какие-то действия с транзакциями помимо нужных для контроля за откатом.
← →
Johnmen © (2005-02-22 13:32) [6]>Aleksandr. (22.02.05 13:28) [5]
1. Управление транзакциями - прерогатива клиента.
2. DDL запросы в ХП недопустимы.
Вот этим и надо руководствоваться.
← →
Desdechado © (2005-02-22 13:36) [7]а еще создание временных таблиц, видимых только одному клиенту, на IB тоже не прокатит, да и смысла нет - всегда можно воспользоваться FOR SELECT в процедуре
← →
Aleksandr. (2005-02-22 13:53) [8]Млин, люди, вы меня совмем запутали. Дайте мне, пожалуйста, пример работающего кода создания, заполнения таблицы через TIbTable и последующего открытия ее через TIbQuery?
← →
Johnmen © (2005-02-22 14:02) [9]1. Создание: IBSQL + CREATE TABLE...
2. Заполнение: (зависит от принципа) или IBDataSet или IBSQL + INSERT INTO...
3. Что такое "открытие" ? Для чего "открытие" ?
← →
Aleksandr. (2005-02-22 14:12) [10]Johnmen © :
2. Заполнение - из таблицы Paradox перекинуть все записи, соответственно, в режиме Insert..Post для TDataSet, например, для TIbTable.
3. Открытие для чтения:
IBQuery1.SQL.Add("SELECT * FROM Table1");
← →
Aleksandr. (2005-02-22 14:26) [11]Да я офигеваю просто.
Вот этот код я уговорил работать:
var
B : TTable;
C : TIBTable;
i : integer;
begin
C:=TIbTable.Create;
try
C.Transaction:=ICTrans;
C.TableName:="table1";
if NOT C.Exists then begin
B:=TTable.Create(nil);
try
B.DatabaseName:=BasesDir;
B.TableName:=ChangeFileExt(C.TableName,".db");
B.Open;
C.FieldDefs.Assign(B.FieldDefs);
C.IndexDefs.Assign(B.IndexDefs);
C.CreateTable;
iCreateTrans.Commit;
C.Transaction:=iRWTrans;
C.Open;
B.First;
while NOT B.Eof do begin
C.Insert;
for i:=0 to B.FieldCount-1 do begin
if C.FindField(B.Fields[i].FieldName)<>nil then begin
C.FindField(B.Fields[i].FieldName).Value:=B.Fields[i].Value
end
end;
C.Post;
B.Next
end
finally
B.Close;
B.Free;
C.Close;
C.Free
end
end;
Затем я вызываю другой метод, в котором делаю:
with TIbQuery.Create(nil) do try
Transaction:=iRWTrans;
SQL.Add("SELECT * FROM Table1");
Open
и хана. Говорит, что таблица Table1 не найдена.
Я просто не представляю, а как все это будет работать, когда я MIDAS переключу с Парадокса на InterBase, если у меня в конвертации столько проблем...
← →
Johnmen © (2005-02-22 14:53) [12]Настоятельно рекомендую почитать какую-либо книгу по теме. Или хотя бы документацию/хелпы + примеры.
← →
Aleksandr. (2005-02-22 15:43) [13]Ебтеть. Она кавычки двойные хотела, оказывается...
← →
Desdechado © (2005-02-22 15:52) [14]имена в кавычках - для 3 диалекта, при этом регистр имен важен
← →
Aleksandr. (2005-02-22 16:15) [15]Desdechado © :
Да, я заметил... Так-так... а есть возможность ему срубить эту херень? Вряд ли MIDAS будет персонально для диалекта разбирать, сохранять регистр или нет для запросов, отправленных с клиента.
← →
Desdechado © (2005-02-22 16:24) [16]тогда диалект 1, с ним надо базу создать
← →
Aleksandr. (2005-02-22 16:30) [17]Desdechado © :
А ограничения по синтаксису этот диалект какие даст в сравнении с 3?
← →
Desdechado © (2005-02-22 17:11) [18]ibase.ru
меня вполне 1-й устраивает
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.03.27;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.033 c