Français Solved Suppression de données avec extDB3: Comment faire?

  • Auteur de la discussion Auteur de la discussion Alexandre
  • Date de début Date de début

Alexandre

User
29/6/21
20
1
1
300
Bonjour,

Alors après avoir cherché toute la nuit ..
Est-ce qu'il existe un DELETE sur extDB3
Si oui pouvez-vous m'indiquer la marche à suivre ?


[CODE lang="sql" title="fn_querySwitch_fsmp"]/*
File: fn_querySwitch_fsmp.sqf
Author: Azira
Description:
Inserting data / Loading data
*/
params [
["_mode",0,[]],
["_index",0,[]],
["_name",objNull,[]],
["_uid",objNull,[]],
["_bilanprim","",[]],
["_douleur","",[]],
["_neuro","",[]],
["_respi","",[]],
["_circu","",[]],
["_lesionnel","",[]],
["_gtsapp","",[]]
];
if (_mode isEqualTo 0 || _name isEqualTo objNull || _uid isEqualTo objNull || _bilanprim isEqualTo "" || _douleur isEqualTo "" || _neuro isEqualTo "" || _respi isEqualTo "" || _circu isEqualTo "" || _lesionnel isEqualTo "" || _gtsapp isEqualTo "") exitWith {};
switch (_mode) do {
case 0: {
_query = format
[
"INSERT INTO intermedical (index, name, uid, bilanprim, douleur, neuro, respi, circu, lesionnel, gtsapp) VALUES('%1', '%2', '%3', '%4', '%5', '%6', '%7', '%8', '%9', '%10')",
_index,
_name,
_uid,
_bilanprim,
_douleur,
_neuro,
_respi,
_circu,
_lesionnel,
_gtsapp
];
[_query,1] call DB_fnc_asyncCall;
};
case 1: {
_query = format
[
"UPDATE intermedical SET bilanprim='%4', douleur='%5, neuro='%6', respi='%7', circu='%8', lesionnel='%9', gtsapp='%10' WHERE index='%1' AND name='%2' AND uid='%3'"
_index,
_name,
_uid,
_bilanprim,
_douleur,
_neuro,
_respi,
_circu,
_lesionnel,
_gtsapp
];
[_query,1] call DB_fnc_asyncCall;
};
case 2 : {
// SUPRESSION
};
case 3: {
private _query = format
[
"SELECT index, name, uid, bilanprim, douleur, neuro, respi, circu, lesionnel, gtsapp FROM intermedical WHERE index='%1' AND name='%2' AND uid='%3'"
_index,
_name,
_uid
];
private _queryResult = [_query,2] call DB_fnc_asyncCall;
if (_queryResult isEqualTo []) exitWith {};
[(_queryResult select [0,9])] remoteExec ["life_fnc_dataReceivedfmsp",remoteExecutedOwner];
};
};[/CODE]

Merci infiniment de votre aide
 
Dernière édition:
Solution
Hello, oui bien sûr, c'est une requête SQL comme une autre :
Code:
_query = format ["DELETE FROM intermedical WHERE index='%1' AND name='%2' AND uid='%3'",_index,_name,_uid];
[_query,1] call DB_fnc_asyncCall;
D'ailleurs petite question par rapport à ce sujet > J'aimerais lister pour le joueur plusieurs lignes provenant du même joueur avec un système d'index genre de 0 à infini
Mais j'avoue n'avoir jamais travaillé avec un système d'index dans un dialog

Je suppose qu'il faut utiliser un for "_i" : Mais concrètement comment le système ce poserai ?

Je vous laisse ci-joint les éléments liés à la partie client pour mieux comprendre (Je ne donne pas forcément tout les codes, mais normalement, vous devriez avoir les éléments nécessaires pour répondre à la question)


[CODE lang="sql" title="fn_plr_fmsp"]disableSerialization;
private _display = uiNamespace getVariable ["menuspmedical", displayNull];
if (isNull _display) exitWith {};

private _list = _display displayCtrl 7000;
lbClear _list;

{
private _side = switch (side _x) do {case west: {"Gendarme"}; case civilian : {"Civil"}; case independent : {"Médecin"}; default {"Inconnu"};};
_index = _list lbAdd format
[
"%1 (%2)",
name _x,
_side
];
lbSetData [7000, _index , str(_x)];
} forEach playableUnits;

["Load : Chargement des données (Liaison avec la base de donnée des services de secours) ...", "warning"] call Life_fnc_notification_system;
[/CODE]

[CODE lang="sql" title="fn_validate_fmsp"]if ((lbCurSel 7000) isEqualTo -1) exitWith {["Error : Joueur non sélectionné ...", "Error"] call Life_fnc_notification_system;};

private _unit = lbData [7000,lbCurSel 7000];
_unit = call compile format ["%1",_unit];
if (isNil "_unit") exitWith {};
if (isNull _unit) exitWith {};

_name = name _unit;
_uid = getPlayerUID _unit;[/CODE]

Cependant je me demande s'il serait pas plus judicieux de créer, et vérifier l'index côté serveur au lieu qu'il soit vérifié côté client ?

Avez-vous une idée, et un avis sur la question ?

En pièce jointe une maquette qui détaillera un peu ma question

J'édit mon post voici le code sqf partie client final :

SQL:
params [
    ["_index",0,[]],
    ["_name",objNull,[]],
    ["_uid",objNull,[]]
];

private _display = findDisplay 221221233;
disableSerialization;

_nom = _display displayCtrl 7000;
_prenom = _display displayCtrl 7001;
_datenaissance = _display displayCtrl 7002;
_strname = _name splitString " ";

_list = _display displayCtrl 7009;

if (isNull _name) then {
    lbClear _list;
  
    private _indexdefault = _list lbAdd [
        "> Données inconnues ...",
    ];

    ctrlEnable 7008 false;
    ctrlEnable 7006 false;

    _nom ctrlSetText [format ["%1",_strname select 0]];
    _prenom ctrlSetText [format ["%1",_strname select 1]];
    _datenaissance ctrlSetText ["Non définie"];
} else {
    lbClear _list;

    {
        private _indexlist = _list lbAdd format [
            "Index %1 > %2 - %3",
            _index,
            _name, // name
            _uid // uid
        ];
        lbSetData [7009,_indexlist,_x];
    } forEach _name;

    ctrlEnable 7008 true;
    ctrlEnable 7006 true;

    _nom ctrlSetText [format ["%1",_strname select 0]];
    _prenom ctrlSetText [format ["%1",_strname select 1]];
    _datenaissance ctrlSetText ["Non définie"];
};
 

Fichiers joints

  • maquette.png
    maquette.png
    101.5 KB · Affichages: 36
Dernière édition:
Après j’ai fait sous forme de switch je pense que dans mon cas c’est meilleure à faire
En réalité ça ne change pas grand chose. C'est parfois plus clair pour revenir dessus plusieurs mois/années après de faire plusieurs fichiers mais avec un switch ça fonctionne aussi.

Cependant je me demande s'il serait pas plus judicieux de créer, et vérifier l'index côté serveur au lieu qu'il soit vérifié côté client ?
Il y a deux méthodes selon ce que tu veux faire.

L'index est commun à tous les joueurs (un seul joueur aura le document #1, #2 etc.) :

Le plus simple est d'ajouter une colonne "ID" de type INT 100, en AUTOINCREMENT dans la table qui stocke ces données. L'index sera automatiquement créé par la base de données. Ensuite tu le récupères côté serveur avec une requête SELECT, le résultat est envoyé au client via un remoteExec, puis tu peux afficher les données dans ton menu.

L'index est propre à chaque joueur (chaque joueur aura son document #1, #2, etc.) :

Tu peux simplement afficher l'index dans l'array ( + 1 car il commence à 0), de cette manière :
Code:
{
    private _indexlist = _list lbAdd format [
        "Index %1 > %2 - %3",
        (_forEachIndex + 1),
        _name, // name
        _uid // uid
    ];

    lbSetData [7009,_indexlist,_x];
} forEach _name;