Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
1-1110424363
SerKom
2005-03-10 06:12
2005.03.27
Как узнать, есть ли обработчик события у компонента?


14-1109952872
старый маразматикЪ
2005-03-04 19:14
2005.03.27
30 ответов модератора на вопрос "почему удалили моё сообщение?"


3-1109434120
Mortal
2005-02-26 19:08
2005.03.27
Как создать Indexы для dBase?


6-1106907685
ТехникПТО
2005-01-28 13:21
2005.03.27
OnNewWindow2 в динамически созданном браузере


14-1110280115
SergP
2005-03-08 14:08
2005.03.27
ИЕ





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский