Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.27;
Скачать: CL | DM;

Вниз

Не могу отладить создание таблицы в 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.541 c
1-1110974587
bon
2005-03-16 15:03
2005.03.27
Autocad &amp; Delphi


1-1110296748
rolex
2005-03-08 18:45
2005.03.27
Увеличится ли скорость в моём случае если я сделаю 2 потока?


1-1110955876
Tankist
2005-03-16 09:51
2005.03.27
LISTVIEW - Как сортировать элементы не по 1-му столбцу, а по 2-му


6-1106885134
stim24
2005-01-28 07:05
2005.03.27
Интересная программа для ИНТЕРНЕТА


14-1110030629
Cosinus
2005-03-05 16:50
2005.03.27
Я возмущен!!! Посмотрите, пожалуста, может я неправ?