|
|
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
Пробовал задать этот вопрос в разделе С#. Так никто и не ответил. Может тут кто поможет. Выкладываю сразу все посты: как сделать так, чтобы при добавлении новой строки в DataGrid primary key автоматически генерировался? И чтобы он в DataGrid вообще не показывался? Заполение грида: productsAdapter = new OracleDataAdapter("select id, name from test", conn); productsCmdBuilder = new OracleCommandBuilder(productsAdapter); productsDataSet = new DataSet("productsDataSet"); productsAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; productsAdapter.Fill(productsDataSet, "menu"); dataGridView1.DataSource = productsDataSet.Tables["menu"]; Генерирование id: cmd = new OracleCommand(); cmd.CommandText = "select seq.nextval from dual"; cmd.Connection = conn; reader = cmd.ExecuteReader(); reader.Read(); int id = (int)reader.GetDecimal(0); Подскажите, как это сделать автоматически? И как не показывать id в гриде? Если ставить признак колонки Visible = false, то невозможно добавить новую строку... Вот как я пока решил проблему с primary key: Надо было все лишь добавить свой запрос в InsertCommand вот код: OracleCommand inscmd = new OracleCommand("insert into test (id, name) values (seq.nextval, :NAME)", conn); inscmd.Parameters.Add(":NAME", OracleDbType.Varchar2, 14, "NAME"); productsAdapter.InsertCommand = inscmd; Попутно встал следующий вопрос: предположим, что в один датагрид выбираются данные из 2-х таблиц. Как сделать UPDATE обоих таблиц, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2006, 15:08 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
а вы поиском пробовали пользоваться, прежде чем плодить свои топики по всем форумам? по поводу автоинкрементных полей http://www.sql.ru/forum/actualthread.aspx?tid=161265 http://www.sql.ru/forum/actualthread.aspx?tid=271022 по поводу невидимости колонки в гриде (если это DataGrid а не DataGridView) - ищите по слову TableStyle еще в MSDN рекомендую заглянуть ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2006, 17:30 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
по поводу двух таблиц - - я тока к этому начал подбираться, пока решил эту пробдему криво, но гдето встречал нормальный вариант, потом потерял: датасет наполнил 3-мя таблицами, 1 и 2 это просто таблицы, а 3-я та по которой строиться грид (в моем случае тревью), затем добавление записей делал в отдельной форме, и вставлял записи в каждую таблицу отдельно через командбилдер каждого адаптера каждой таблицы, при этом обновлял данные в датасете в таблице которая заполнялась селектом по двум таблицам, затем или перестраивал тревью или просто обновлял редактируемый узел согласен что это очень криво, второй вариант, это чтото типа того, что грид формируется по колонкам из разных таблиц, тогда по теории обновление для каждой таблицы пройдет по своему датаадаптеру. за последний вариант не уверен, не помню где это я видел. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2006, 17:58 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
Sergey Sпо поводу двух таблиц - - я тока к этому начал подбираться, пока решил эту пробдему криво, но гдето встречал нормальный вариант, потом потерял: датасет наполнил 3-мя таблицами, 1 и 2 это просто таблицы, а 3-я та по которой строиться грид (в моем случае тревью), затем добавление записей делал в отдельной форме, и вставлял записи в каждую таблицу отдельно через командбилдер каждого адаптера каждой таблицы, при этом обновлял данные в датасете в таблице которая заполнялась селектом по двум таблицам, затем или перестраивал тревью или просто обновлял редактируемый узел согласен что это очень криво, второй вариант, это чтото типа того, что грид формируется по колонкам из разных таблиц, тогда по теории обновление для каждой таблицы пройдет по своему датаадаптеру. за последний вариант не уверен, не помню где это я видел. ?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2006, 18:03 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
Sergey Sпо поводу двух таблиц - - я тока к этому начал подбираться, пока решил эту пробдему криво, но гдето встречал нормальный вариант, потом потерял: датасет наполнил 3-мя таблицами, 1 и 2 это просто таблицы, а 3-я та по которой строиться грид (в моем случае тревью), затем добавление записей делал в отдельной форме, и вставлял записи в каждую таблицу отдельно через командбилдер каждого адаптера каждой таблицы, при этом обновлял данные в датасете в таблице которая заполнялась селектом по двум таблицам, затем или перестраивал тревью или просто обновлял редактируемый узел согласен что это очень криво, второй вариант, это чтото типа того, что грид формируется по колонкам из разных таблиц, тогда по теории обновление для каждой таблицы пройдет по своему датаадаптеру. за последний вариант не уверен, не помню где это я видел. Насколько я понял по тем примерам, что видел обновить сразу две таблицы можно только изпользуя два датасэта? Одним никак не получится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2006, 18:28 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
krot-s Насколько я понял по тем примерам, что видел обновить сразу две таблицы можно только изпользуя два датасэта? Одним никак не получится? чего вдруг?! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2006, 19:19 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
2 krot-s (по поводу 2 krot-sпредположим, что в один датагрид выбираются данные из 2-х таблиц. Как сделать UPDATE обоих таблиц) вы имеете в виду у вас источником для грида служит DataSet с 2-мя и больше таблиц(DataTable)? если это так - то зачем два DataSet-а? или вы имели в виду что датасет у вас заполняется запросом select ... from table1 join table2 и вам нужно изменить table1 & table2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.07.2006, 19:24 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
winsky!2 krot-s (по поводу 2 krot-sпредположим, что в один датагрид выбираются данные из 2-х таблиц. Как сделать UPDATE обоих таблиц) вы имеете в виду у вас источником для грида служит DataSet с 2-мя и больше таблиц(DataTable)? если это так - то зачем два DataSet-а? или вы имели в виду что датасет у вас заполняется запросом select ... from table1 join table2 и вам нужно изменить table1 & table2? Именно второй случай. select t1.id, t1.name, t2.name from test1 t1, test2 t2 where t1.id = t2.f_key. Как быть в таком случае? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 13:09 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
и как вы себе представляете этот апдейт, если у вас на клиенте неизвесен PK table2 - это раз во вторых - вы мух от котлет отделите... как я понимаю table1 и table2 у вас связано один-ко-многим как вы себе представляете изменение table2.name именно на клиенте? т.е. вы меняете имя 'name1' на 'name2' в одной строке (где table2.id = 1), а у вас строк с table2.name = 'name1' and table2.id =1 - не одна, остальные тоже должны поменятся, или как вы себе это представляете? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 14:03 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
winsky!и как вы себе представляете этот апдейт, если у вас на клиенте неизвесен PK table2 - это раз во вторых - вы мух от котлет отделите... как я понимаю table1 и table2 у вас связано один-ко-многим как вы себе представляете изменение table2.name именно на клиенте? т.е. вы меняете имя 'name1' на 'name2' в одной строке (где table2.id = 1), а у вас строк с table2.name = 'name1' and table2.id =1 - не одна, остальные тоже должны поменятся, или как вы себе это представляете? Именно так и представляю. Запрос конечно можно изменить на select t1.id, t1.name, t2.name, t2.id from test1 t1, test2 t2 where t1.id = t2.f_key Или более правильно будет загрузить test1 и test2 в разные таблицы датасэта и установить между ними связь? Вообще интересно, кто как пишет программы с большим количеством таблиц, связей и соответственно кучей форм? Хотябы общая архитектура.... Просто в ближайшее время надо будет писать немаленькую учетную систему, и соответственно интересен опыт других людей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 14:30 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
Или более правильно будет загрузить test1 и test2 в разные таблицы датасэта и установить между ними связь? наверное так лучше (имхо) про общую архитектуру - лучше не грузить большие таблицы в DataSet целиком, а организовывать некий постраничный вывод(здесь обсуждалось, в смысле на ADO.NET, C#.NET, VB.NET форумах) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 14:42 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
Но для каждой таблицы определенно надо иметь свой адаптер. Или я опять ошибаюсь..? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 16:15 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
определенно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.07.2006, 16:32 |
|
||
|
DataSet + priamary key из sequence ?
|
|||
|---|---|---|---|
|
#18+
krot-sПробовал задать этот вопрос в разделе С#. Так никто и не ответил. Может тут кто поможет. Выкладываю сразу все посты: как сделать так, чтобы при добавлении новой строки в DataGrid primary key автоматически генерировался? И чтобы он в DataGrid вообще не показывался? Заполение грида: productsAdapter = new OracleDataAdapter("select id, name from test", conn); productsCmdBuilder = new OracleCommandBuilder(productsAdapter); productsDataSet = new DataSet("productsDataSet"); productsAdapter.MissingSchemaAction = MissingSchemaAction.AddWithKey; productsAdapter.Fill(productsDataSet, "menu"); dataGridView1.DataSource = productsDataSet.Tables["menu"]; Генерирование id: cmd = new OracleCommand(); cmd.CommandText = "select seq.nextval from dual"; cmd.Connection = conn; reader = cmd.ExecuteReader(); reader.Read(); int id = (int)reader.GetDecimal(0); Подскажите, как это сделать автоматически? И как не показывать id в гриде? Если ставить признак колонки Visible = false, то невозможно добавить новую строку... Вот как я пока решил проблему с primary key: Надо было все лишь добавить свой запрос в InsertCommand вот код: OracleCommand inscmd = new OracleCommand("insert into test (id, name) values (seq.nextval, :NAME)", conn); inscmd.Parameters.Add(":NAME", OracleDbType.Varchar2, 14, "NAME"); productsAdapter.InsertCommand = inscmd; Попутно встал следующий вопрос: предположим, что в один датагрид выбираются данные из 2-х таблиц. Как сделать UPDATE обоих таблиц, По поводу, что бы он автоматически генерировался нужно на таблице датасета поставить ограничение на уникальность и автоинкремент. Свойство так и называется autoincrement = true; autoincrementstep = 1; и т д. Разберешься. Хороший совет дам. Никогда не передавай это дело в базу. В логике базы должна быть своя уникальность, а используй только для своих нужд. По поводу выводу в грид, то просто не добавляй этот столбец и все проблемы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.07.2006, 13:28 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=33848154&tid=1353248]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 360ms |

| 0 / 0 |
