Вверх ↑
Этот топик читают: Гость
Ответов: 257
Рейтинг: -2
#1: 2013-11-10 23:25:03 ЛС | профиль | цитата
1.Помогите примером как переписать содержимое таблицы в бд sqlite обязательно с int primary key. Таблица в MTstrТЫ. Не могу никак найти поиском

2.Предположим что таблица в БД заполнена строками, а у меня в MTstrТЫ те же самые строки (возможно в другом порядке), но с другими значениями нескольких ячеек, каким образом мне заменить эти значения в БД? Ну, тоесть к примеру в БД строка " шпала 1 1 1 " а в таблице эта строка "шпала 2 3 4" и таких строк множество. Каким образом переписать таблицу БД чтоб значения поменялись в нужных строках (надеюсь понятно объяснил). Два дня уже голову ломаю, так ничего не придумал.

3. Таблица импортируется из EXEL. Как мне сделать выборку колонок? То есть у меня в БД есть колонки наименование, колличество и т.д. Как мне сделать настройку чтоб скажем значения из столбца "тест" в MTstrТЫ записывалось в колонку бд "колличество" и т.д.

карма: 0

0
Ответов: 16884
Рейтинг: 1239
#2: 2013-11-11 00:11:53 ЛС | профиль | цитата
В примерах, идущих с HiAsm-ом, есть SQLite_Demo.sha
Там посмотри как это всё должно работать.
Ничего там сложного нет.
Во главу угла нужно ставить не работу с MTStrTbl, а работу с БД, а MTStrTbl - это просто окно в данные БД.
Как только это поймёшь, так сразу всё станет очень просто.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 257
Рейтинг: -2
#3: 2013-11-11 00:16:23 ЛС | профиль | цитата
да нафига мне sqlite demo? В справке не показано каким образом можно делать выборку полей для записи да и к тому же делать чтоб он изменял значения в заданных строках которые уже есть.
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#4: 2013-11-11 00:17:48 ЛС | профиль | цитата
там как раз это всё работает. И изменённые поля записывает и всё что хочешь
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 257
Рейтинг: -2
#5: 2013-11-11 00:22:28 ЛС | профиль | цитата
И это очень сложно, потому как например колонки таблицы:

цена наименование кол

а колонки в БД

наименование номер цена кол.

Нужно чтоб при нахождении строки где наименование "шпала" он переписывал в нем остальные значения которые есть в таблице (оставляя при этом те значения которых там нет, в прмере- колонка номер), а если такой строки нет - то записывал ее, при этом нужно чтоб была возможность выбора какие колонки в таблице в какие колонки таблицы бд писать, то есть например в примере выше

Таблица БД наименование номер цен кол
Колонки MTstr 2 null 1 3

и это нужно делать со всеми строками которые есть в mtstr
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#6: 2013-11-11 00:35:35 ЛС | профиль | цитата
Есть точки onLineChange и onBeforeLineChange
mudfactory писал(а):
И это очень сложно, потому как например колонки таблицы:
цена наименование кол
а колонки в БД
наименование номер цена кол.
Просто перекрестить линки(или переставить номера) в FormatStr
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 257
Рейтинг: -2
#7: 2013-11-11 00:58:45 ЛС | профиль | цитата
каждый раз перекрещивать связи в форматстр не вариант. таблицы все разные. Вот по ходу дела вопрос, позже схему выложу что придумал, как прочитать имя столбца в таком варианте -

code_32294.txt

какой там разделитель?
карма: 0

0
файлы: 1code_32294.txt [537B] [199]
Разработчик
Ответов: 26324
Рейтинг: 2148
#8: 2013-11-11 01:46:10 ЛС | профиль | цитата
mudfactory писал(а):
какой там разделитель?


ColDelimiter = "="
------------ Дoбавленo в 01.46:
Add(MainForm,2953706,315,217)
{
Width=601
Height=340
}
Add(MTStrTbl,7000450,315,280)
{
Left=5
Top=25
Width=666
Height=248
Name="import"
Columns=#1:1|1:2|1:3|1:4|1:5|
FlatScroll=1
ColumnClick=1
ColorItems=0
link(onColumnClick,101518:doRead,[])
}
Add(Edit,12095862,483,294)
{
Left=5
Top=275
Width=485
}
Add(MST_ArrayCols,4801550,371,217)
{
MSTControl="import"
}
Add(ArrayRW,101518,371,287)
{
link(onRead,8704777:doSplit,[])
link(Array,4801550:ColumnArray,[])
}
Add(StrPart,8704777,427,287)
{
Char="="
link(onPart,12095862:doText,[])
}


карма: 22

0
Ответов: 257
Рейтинг: -2
#9: 2013-11-11 01:51:20 ЛС | профиль | цитата
спасибо, уже нашел. Еще вопрос - допустим у меня в БД строка с колонками:

1 2 3 4 5

как мне сделать запрос чтоб записывались только значения 1 3 5, ну например

колонки в БД

Имя фамилия отчество

Мне нужно чтоб записалось так

Имя фамилия отчество
Вася (тут ничего не переписываем) Петров

Все это с помощью форматстр. если insert or replace value (%1,%2,%3) и второе значение оставит пустым, то оно перепишется на пустое, а нужно чтоб не менялось
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#10: 2013-11-11 09:54:50 ЛС | профиль | цитата
mudfactory писал(а):
допустим у меня в БД строка с колонками:
1 2 3 4 5
и нужно изменить значение только в 3-й колонке
UPDATE <имя таблицы> SET <имя колонки> = "Николаевич" WHERE id=%1;
%1 - id строки (то, которое INTEGER PRIMARY KEY).

Если id строки (то, которое INTEGER PRIMARY KEY) в таблице нет, то применяется
UPDATE <имя таблицы> SET otch = "Николаевич" WHERE name="Вася" AND fam="Петров";
или 
REPLACE <имя таблицы>(id,<имя колонки>) values(%1,"Николаевич")
И у всех Васей Петровых отчество станет - Николаевич, но при замене все остальные колонки примут дефолтное значение.



карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 257
Рейтинг: -2
#11: 2013-11-11 18:54:04 ЛС | профиль | цитата
Tad, подскажи, а как сделать если колонки нельзя определить заранее - у меня есть механизм, который в результате действий пользователя формирует запрос insert or replace values ('','','2','','3','4',); и т.д. То есть значения подставляются в зависимости от сформированой маски пользователем.

code_32298.txt
------------ Дoбавленo в 18.48:
дальше, когда начинется перебор строки, программа должна искать строку в базе где наименование=значению наименования строки из таблицы и номер= значению номера в строке из таблицы, если такая строка находится, то она загружиется в поля (или не загружается), в общем если находится тогда в ней переписываютс только те значения что были заданы изначально в маске (см в примере настроку столбцов), а если строка не находится, то тогда она записывается с новым integer. Вот на этом застрял
------------ Дoбавленo в 18.54:
в моем варианте получается если при нахождении строки выводить все колонки в ячейки памяти, а потом загружать туда же значения той же строки из таблицы, то так как там уже маска сформирована - половина нужных колонок будет перезаписываться пустыми значениями если делать replace. Как можно это исправить, не городя еще одну пирамиду ячкке памяти и форматстр?
карма: 0

0
файлы: 1code_32298.txt [13.5KB] [222]
Ответов: 16884
Рейтинг: 1239
#12: 2013-11-11 19:33:21 ЛС | профиль | цитата
Ещё раз повторю
Tad писал(а):
В примерах, идущих с HiAsm-ом, есть SQLite_Demo.sha
. Там это всё есть и запоминание имён выбранных колонок, и Insert, и Update, и DELETE. Короче - всё, что тебе надо.
И зря ты
mudfactory писал(а):
да нафига мне sqlite demo?

карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 257
Рейтинг: -2
#13: 2013-11-12 10:16:18 ЛС | профиль | цитата
я ничего там не могу понять в этих двух вложеных схемах. Можешь объяснить доступно, опираясь на мой конкретны пример, который я выложил? Мне нужно чтоб после загрузки таблицы из exel (готово), пользователь выбирал, в какие колонки что писать ( готово, но не подходит), далее чтоб таблица перегонялась в БД, при этом если в БД есть строка с таким же наименованием и номером, то в нее нужно записать выбранные значения из такой же строки в таблице, не меняя остальный ячейки, а если такого наименования и номера нет - то строка записывается новая, опять же импользуя маску, заданную пользователем куда и что писать.
------------ Дoбавленo в 10.16:
Tad писал(а):
UPDATE <имя таблицы> SET <имя колонки> = "Николаевич" WHERE id=%1;
или 
REPLACE <имя таблицы>(id,<имя колонки>) values(%1,"Николаевич")


ячейки id, name, nomer, kol

забиваются запросом insert or update into table (id,%2) values (%3). при следующей перезаписи, нужно чтоб менялись значения в этих же колонках (id,%2)на значения которые тоже через форматстр подаются (%3), а остальные ячейки не затирались. Как реализовать? update c этим синтаксисом не работает.
карма: 0

0
13
Сообщение
...
Прикрепленные файлы
(файлы не залиты)