Beste
Voor een hobby/leerproject ben ik bezig met een soort van pseudo-compiler die een 'zelf uitgevonden' taal vertaalt naar bekende/grote/veel gebruikte programmeertalen. (Tot nu toe alleen C#, later waarschijnlijk Java en Obj-C erbij)
Omdat dit programma dus een vertaalslag moet maken, heb ik een databank met daarin regels code. Nu wou ik die op een soort van treeview manier opslaan, zodat ik later zelf een kleine editor kan schrijven, waarmee ik gemakkelijk adhv die treeview kan zien waar ik die code opsla, een voorbeeldje van die 'treeview':
-Layout
--Control
---settext
---setheight
---setleft
---....
--Form
---Initialisation
---addcontrol
-Logic
--Variable
---declaration
De treeview kan (en zal) ook wel dieper gaan dan 3. (ongelimiteerd eigenlijk)
Nu heb ik op dat op een wel erg lame manier gedaan. Nu ziet mijn databankstructuur (voor zover je het structuur kan noemen) er zo uit:
'Platform' verwijst naar een andere tabel, genaamd platforms, waar dan bijvoorbeeld 'Desktop' inzit (dat is dan C# code, want ik compileer met mono), maar in de toekomst kan daar ook 'Android' inzitten, dan zal '<de overeenkomstige code>' Java zijn, en er in de kolom platform iets anders zitten. Wat nu nog niet in de tabel zit, maar ik er wel in wil hebben, is een soort van reference code, dus bijvoorbeeld een row, en als die die eruit haalt, dan heb je eigenlijk 5 andere rows gecontamineerd.
Goed, dit is natuurlijk niet goed. Maar ik weet niet zo goed hoe ik het echt 'goed' moet doen, ik dacht aan een structuur zoals:
codeTabel:
treeview tabel
reference tabel
Op die manier zou het (denk ik) ook wel gaan, maar dan heb ik nog totaal geen idee hoe ik de juiste code uit die database ga trekken met een query. Ik wil dat dan oplossen met een SQL-query, maar heb totaal geen idee hoe, ik dacht aan een function ofzo, maar ik weet dan ook niet hoe ik juiste parameters kan meegeven dat hij diep genoeg in de treeview kan.
Nu heb ik deze code in mijn programma om de juiste code uit de database te halen:
Maar dat zal natuurlijk hevig veranderen, want als ik bijvoorbeeld wil zoeken naar 'initialisation', nja, dat kan van een form komen, maar natuurlijk ook van een object bijvoorbeeld. (En form zit dan weer onder layout, terwijl een object bij logic hoort).
Dus ik zou een SQL functie moeten hebben die iets doet als getCode('layout', 'object', 'initalisation', 'Desktop'), maarja, het kunnen zo 5 parameters zijn, maar ook 20 (bij wijze van spreken). En heb geen idee hoe ik dat in SQL functies moet oplossen. Kan iemand me een richting geven over hoe ik dit zou oplossen?
Of als iemand het helemaal anders zou aanpakken, dan hoor ik dat ook heel graag natuurlijk, andere inzichten kunnen heel nuttig zijn, daar ik niet zo thuis ben in deze materie, en dus nog veel te leren heb.
Alvast bedankt.
Voor een hobby/leerproject ben ik bezig met een soort van pseudo-compiler die een 'zelf uitgevonden' taal vertaalt naar bekende/grote/veel gebruikte programmeertalen. (Tot nu toe alleen C#, later waarschijnlijk Java en Obj-C erbij)
Omdat dit programma dus een vertaalslag moet maken, heb ik een databank met daarin regels code. Nu wou ik die op een soort van treeview manier opslaan, zodat ik later zelf een kleine editor kan schrijven, waarmee ik gemakkelijk adhv die treeview kan zien waar ik die code opsla, een voorbeeldje van die 'treeview':
-Layout
--Control
---settext
---setheight
---setleft
---....
--Form
---Initialisation
---addcontrol
-Logic
--Variable
---declaration
De treeview kan (en zal) ook wel dieper gaan dan 3. (ongelimiteerd eigenlijk)
Nu heb ik op dat op een wel erg lame manier gedaan. Nu ziet mijn databankstructuur (voor zover je het structuur kan noemen) er zo uit:
id | name | code | platform |
1 | layout_control_settext | <de overeenkomstige code> | 0 |
'Platform' verwijst naar een andere tabel, genaamd platforms, waar dan bijvoorbeeld 'Desktop' inzit (dat is dan C# code, want ik compileer met mono), maar in de toekomst kan daar ook 'Android' inzitten, dan zal '<de overeenkomstige code>' Java zijn, en er in de kolom platform iets anders zitten. Wat nu nog niet in de tabel zit, maar ik er wel in wil hebben, is een soort van reference code, dus bijvoorbeeld een row, en als die die eruit haalt, dan heb je eigenlijk 5 andere rows gecontamineerd.
Goed, dit is natuurlijk niet goed. Maar ik weet niet zo goed hoe ik het echt 'goed' moet doen, ik dacht aan een structuur zoals:
codeTabel:
id | name | code | platform |
treeview tabel
id | parentid | childid |
reference tabel
id | codeid | referenceid |
Op die manier zou het (denk ik) ook wel gaan, maar dan heb ik nog totaal geen idee hoe ik de juiste code uit die database ga trekken met een query. Ik wil dat dan oplossen met een SQL-query, maar heb totaal geen idee hoe, ik dacht aan een function ofzo, maar ik weet dan ook niet hoe ik juiste parameters kan meegeven dat hij diep genoeg in de treeview kan.
Nu heb ik deze code in mijn programma om de juiste code uit de database te halen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| Dim ps as MySQLPreparedStatement = con.Prepare("SELECT code FROM code WHERE name = ? AND platform = ?") ps.BindType(0, MySQLPreparedStatement.MYSQL_TYPE_STRING) ps.BindType(1, MySQLPreparedStatement.MYSQL_TYPE_LONGLONG) ps.Bind(0, Name.Lowercase) ps.Bind(1, cInt(platfrm)) Dim rs As RecordSet = ps.SQLSelect If rs <> nil Then Dim ac As new aCode ac.Code = rs.Field("code").StringValue Return ac End if |
Maar dat zal natuurlijk hevig veranderen, want als ik bijvoorbeeld wil zoeken naar 'initialisation', nja, dat kan van een form komen, maar natuurlijk ook van een object bijvoorbeeld. (En form zit dan weer onder layout, terwijl een object bij logic hoort).
Dus ik zou een SQL functie moeten hebben die iets doet als getCode('layout', 'object', 'initalisation', 'Desktop'), maarja, het kunnen zo 5 parameters zijn, maar ook 20 (bij wijze van spreken). En heb geen idee hoe ik dat in SQL functies moet oplossen. Kan iemand me een richting geven over hoe ik dit zou oplossen?
Of als iemand het helemaal anders zou aanpakken, dan hoor ik dat ook heel graag natuurlijk, andere inzichten kunnen heel nuttig zijn, daar ik niet zo thuis ben in deze materie, en dus nog veel te leren heb.
Alvast bedankt.