Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не могу отладить создание таблицы в yaffil! [D7, IB6.x, MSSQL, Paradox]


Aleksandr. ©   (2005-02-22 12:23:00) 

Коннекчусь к IbDB, активизирую транзакцию, вызываю IbTable1.CreateTable. Затем делаю IbTable1.Open, появляется ошибка, что таблица не найдена. Ладно, делаю транзакции Commit, таблица открывается. Закрываю транзакцию, активизирую снова, делаю через IbQuery запрос к этой таблице - таблица опять не найдена. Хотя элементарный просмотр по F3 файла базы данных показывает, что таблица в нем присутствует. Я впервые на yaffil перешел с Парадокса, объясните мне порядок работы с созданием, удалением и редактированием таблиц Interbase, пожалуйста, а то не пойму я никак, в чем проблемы!


Desdechado   (2005-02-22 17:11:00) [1]

ibase.ru
меня вполне 1-й устраивает


Aleksandr.   (2005-02-22 16:30:00) [2]

Desdechado © :
А ограничения по синтаксису этот диалект какие даст в сравнении с 3?


Desdechado   (2005-02-22 16:24:00) [3]

тогда диалект 1, с ним надо базу создать


Aleksandr.   (2005-02-22 16:15:00) [4]

Desdechado ©  :
Да, я заметил... Так-так... а есть возможность ему срубить эту херень? Вряд ли MIDAS будет персонально для диалекта разбирать, сохранять регистр или нет для запросов, отправленных с клиента.


Desdechado   (2005-02-22 15:52:00) [5]

имена в кавычках - для 3 диалекта, при этом регистр имен важен


Aleksandr.   (2005-02-22 15:43:00) [6]

Ебтеть. Она кавычки двойные хотела, оказывается...


Johnmen   (2005-02-22 14:53:00) [7]

Настоятельно рекомендую почитать какую-либо книгу по теме. Или хотя бы документацию/хелпы + примеры.


Aleksandr.   (2005-02-22 14:26:00) [8]

Да я офигеваю просто.
Вот этот код я уговорил работать:

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, если у меня в конвертации столько проблем...


Aleksandr.   (2005-02-22 14:12:00) [9]

Johnmen ©  :
2. Заполнение - из таблицы Paradox перекинуть все записи, соответственно, в режиме Insert..Post для TDataSet, например, для TIbTable.
3. Открытие для чтения:
IBQuery1.SQL.Add('SELECT * FROM Table1');


Johnmen   (2005-02-22 14:02:00) [10]

1. Создание: IBSQL + CREATE TABLE...
2. Заполнение: (зависит от принципа) или IBDataSet или IBSQL + INSERT INTO...
3. Что такое "открытие" ? Для чего "открытие" ?


Aleksandr.   (2005-02-22 13:53:00) [11]

Млин, люди, вы меня совмем запутали. Дайте мне, пожалуйста, пример работающего кода создания, заполнения таблицы через TIbTable и последующего открытия ее через TIbQuery?


Desdechado   (2005-02-22 13:36:00) [12]

а еще создание временных таблиц, видимых только одному клиенту, на IB тоже не прокатит, да и смысла нет - всегда можно воспользоваться FOR SELECT в процедуре


Johnmen   (2005-02-22 13:32:00) [13]

>Aleksandr.   (22.02.05 13:28) [5]

1. Управление транзакциями - прерогатива клиента.
2. DDL запросы в ХП недопустимы.

Вот этим и надо руководствоваться.


Aleksandr.   (2005-02-22 13:28:00) [14]

Johnmen © :
Может, я неясно выразился. На MS SQL я в одну хранимую процедуру могу воткнуть и создание, и заполнение таблицы, и на стороне Делфи все ограничится наличием TADOConnection+TADOStoredProc. Если мне нужно иметь возможность отката изменений при работе с группой таблиц, я коннекту сделаю вручную вызов BeginTrans..CommitTrans, но ничего относительно создания таблиц и разруливания транзакций в связи с этим никогда применять не приходилось. А здесь я сталкиваюсь с тем, что на какие-то операции надо вручную вызывать какие-то действия с транзакциями помимо нужных для контроля за откатом.


Johnmen   (2005-02-22 13:14:00) [15]

>Aleksandr.

Странно... Не первый год с MS SQL, а сам SQL знаешь ? Там есть команды CREATE TABLE..., ALTER TABLE..., etc.
И их выполнение, ест-но, д.б. "обрамлено" стартом-завершением транзакции.
Причем тут датасеты, вообще не ясно...


Aleksandr.   (2005-02-22 12:57:00) [16]

Val © :
Нет на DDL, DML нихера об этом. Не первый год работал с MS SQL и Paradox, специфика проблемы чисто от InterBase.

Desdechado © :
Не совсем понял по обоим пунктам. Создавать таблицу запросом Вы имеете в виду? Разные транзакции - это как? У визуальных компонент привязка один на один: один TIbDataBase + один TIbTransaction. Воткнуть две компоненты транзакций и переключать их у датасетов при создании/изменении?


Desdechado   (2005-02-22 12:43:00) [17]

забей на Table, используй Query
создание и заполнение таблиц обязано быть в разных транзакциях


Val   (2005-02-22 12:28:00) [18]

см.SQL: DDL, DML; подтверждение транзакций.


Наверх

Титульная страница Поиск, карта сайта Написать письмо